diff options
-rw-r--r-- | .github/pull_request_template.md | 10 | ||||
-rw-r--r-- | .travis.yml | 7 | ||||
-rw-r--r-- | demo/dist/demo.css | 2 | ||||
-rw-r--r-- | dist/plyr.css | 2 | ||||
-rw-r--r-- | dist/plyr.js | 221 | ||||
-rw-r--r-- | dist/plyr.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.min.js | 2 | ||||
-rw-r--r-- | dist/plyr.min.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.js | 275 | ||||
-rw-r--r-- | dist/plyr.polyfilled.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.min.js | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.min.js.map | 2 | ||||
-rw-r--r-- | gulpfile.js | 7 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | readme.md | 2 | ||||
-rw-r--r-- | src/js/captions.js | 94 | ||||
-rw-r--r-- | src/js/controls.js | 36 | ||||
-rw-r--r-- | src/js/defaults.js | 18 | ||||
-rw-r--r-- | src/js/html5.js | 10 | ||||
-rw-r--r-- | src/js/i18n.js | 8 | ||||
-rw-r--r-- | src/js/plyr.js | 23 | ||||
-rw-r--r-- | src/js/ui.js | 12 | ||||
-rw-r--r-- | src/js/utils.js | 5 | ||||
-rw-r--r-- | src/sass/components/progress.scss | 30 | ||||
-rw-r--r-- | src/sass/plyr.scss | 4 | ||||
-rw-r--r-- | yarn.lock | 1760 |
26 files changed, 614 insertions, 1926 deletions
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c4779d3c..670d8a5b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,8 +1,8 @@ ### Link to related issue (if applicable) -### Sumary of proposed changes +### Summary of proposed changes -### Task list - -- [ ] Tested on [supported browsers](https://github.com/sampotts/plyr#browser-support) -- [ ] Gulp build completed
\ No newline at end of file +### Checklist +- [ ] Use `develop` as the base branch +- [ ] Exclude the gulp build from the PR +- [ ] Test on [supported browsers](https://github.com/sampotts/plyr#browser-support) diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..d2722414 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - 'lts/*' + +script: + - npm run lint + - npm run build diff --git a/demo/dist/demo.css b/demo/dist/demo.css index a156a51a..cad9e4c6 100644 --- a/demo/dist/demo.css +++ b/demo/dist/demo.css @@ -1 +1 @@ -@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;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 button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size: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;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{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__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.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:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>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-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;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:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative;margin-right:14px;left:7px}.plyr__progress input[type=range]{position:relative;z-index:2;width:calc(100% + 14px)!important;margin:0 -7px!important}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.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{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';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%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size: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__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px}
\ No newline at end of file +@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;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 button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size: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;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{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__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.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:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>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-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;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:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.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{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';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%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size: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__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px}
\ No newline at end of file diff --git a/dist/plyr.css b/dist/plyr.css index 7591416a..10ad948a 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;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:#4f5b5f;border-radius:2px;color:#fff;font-size: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;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{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__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.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:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>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-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;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:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative;margin-right:14px;left:7px}.plyr__progress input[type=range]{position:relative;z-index:2;width:calc(100% + 14px)!important;margin:0 -7px!important}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.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{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';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%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size: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__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}
\ No newline at end of file +@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;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:#4f5b5f;border-radius:2px;color:#fff;font-size: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;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{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__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.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:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>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-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;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:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.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{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';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%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size: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__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.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__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.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}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}
\ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index 9d473bc5..aae4d632 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1300,6 +1300,14 @@ var utils = { }, + // Get a nested value in an object + getDeep: function getDeep(object, path) { + return path.split('.').reduce(function (obj, key) { + return obj && obj[key]; + }, object); + }, + + // Get the closest value in an array closest: function closest(array, value) { if (!utils.is.array(array) || !array.length) { @@ -1719,6 +1727,13 @@ var html5 = { player.media.src = supported[0].getAttribute('src'); + // Restore time + var onLoadedMetaData = function onLoadedMetaData() { + player.currentTime = currentTime; + player.off('loadedmetadata', onLoadedMetaData); + }; + player.on('loadedmetadata', onLoadedMetaData); + // Load new source player.media.load(); @@ -1727,9 +1742,6 @@ var html5 = { player.play(); } - // Restore time - player.currentTime = currentTime; - // Trigger change event utils.dispatchEvent.call(player, player.media, 'qualitychange', false, { quality: input @@ -1771,11 +1783,15 @@ var i18n = { var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) { + if (utils.is.empty(key) || utils.is.empty(config)) { return ''; } - var string = config.i18n[key]; + var string = utils.getDeep(config.i18n, key); + + if (utils.is.empty(string)) { + return ''; + } var replace = { '{seektime}': config.seekTime, @@ -2449,27 +2465,7 @@ var controls = { // Get the badge HTML for HD, 4K etc var getBadge = function getBadge(quality) { - var label = ''; - - switch (quality) { - case 2160: - label = '4K'; - break; - - case 1440: - case 1080: - case 720: - label = 'HD'; - break; - - case 576: - case 480: - label = 'SD'; - break; - - default: - break; - } + var label = i18n.get('qualityBadge.' + quality, _this3.config); if (!label.length) { return null; @@ -2492,7 +2488,6 @@ var controls = { // Translate a value into a nice label - // TODO: Localisation getLabel: function getLabel(setting, value) { switch (setting) { case 'speed': @@ -2500,7 +2495,13 @@ var controls = { case 'quality': if (utils.is.number(value)) { - return value + 'p'; + var label = i18n.get('qualityLabel.' + value, this.config); + + if (!label.length) { + return value + 'p'; + } + + return label; } return utils.toTitleCase(value); @@ -2660,12 +2661,7 @@ var controls = { // Generate options tracks.forEach(function (track) { - controls.createMenuItem.call(_this4, track.language, list, 'language', track.label, track.language !== 'enabled' ? controls.createBadge.call(_this4, track.language.toUpperCase()) : null, track.language.toLowerCase() === _this4.captions.language.toLowerCase()); - }); - - // Store reference - this.options.captions = tracks.map(function (track) { - return track.language; + controls.createMenuItem.call(_this4, track.language, list, 'language', track.label, track.language !== 'enabled' ? controls.createBadge.call(_this4, track.language.toUpperCase()) : null, track.language.toLowerCase() === _this4.language); }); controls.updateSetting.call(this, type, list); @@ -3268,28 +3264,6 @@ var captions = { return; } - // Set default language if not set - var stored = this.storage.get('language'); - - if (!utils.is.empty(stored)) { - this.captions.language = stored; - } - - if (utils.is.empty(this.captions.language)) { - this.captions.language = this.config.captions.language.toLowerCase(); - } - - // Set captions enabled state if not set - if (!utils.is.boolean(this.captions.active)) { - var active = this.storage.get('captions'); - - if (utils.is.boolean(active)) { - this.captions.active = active; - } else { - this.captions.active = this.config.captions.active; - } - } - // Only Vimeo and HTML5 video supported at this point if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) { // Clear menu and hide @@ -3307,17 +3281,6 @@ var captions = { utils.insertAfter(this.elements.captions, this.elements.wrapper); } - // Set the class hook - utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); - - // Get tracks - var tracks = captions.getTracks.call(this); - - // If no caption file exists, hide container for caption text - if (utils.is.empty(tracks)) { - return; - } - // Get browser info var browser = utils.getBrowser(); @@ -3340,14 +3303,52 @@ var captions = { }); } - // Set language - captions.setLanguage.call(this); + // Try to load the value from storage + var active = this.storage.get('captions'); - // Enable UI - captions.show.call(this); + // Otherwise fall back to the default config + if (!utils.is.boolean(active)) { + active = this.config.captions.active; + } + + // Set toggled state + this.toggleCaptions(active); + + // Watch changes to textTracks and update captions menu + if (this.config.captions.update) { + utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this)); + } + + // Update available languages in list next tick (the event must not be triggered before the listeners) + setTimeout(captions.update.bind(this), 0); + }, + update: function update() { + // Update tracks + var tracks = captions.getTracks.call(this); + this.options.captions = tracks.map(function (_ref) { + var language = _ref.language; + return language; + }); + + // Set language if it hasn't been set already + if (!this.language) { + var language = this.config.captions.language; - // Set available languages in list - if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) { + if (language === 'auto') { + var _split = (navigator.language || navigator.userLanguage).split('-'); + + var _split2 = slicedToArray(_split, 1); + + language = _split2[0]; + } + this.language = this.storage.get('language') || (language || '').toLowerCase(); + } + + // Toggle the class hooks + utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); + + // Update available languages in list + if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) { controls.setCaptionsMenu.call(this); } }, @@ -3508,25 +3509,6 @@ var captions = { } else { this.debug.warn('No captions element to render to'); } - }, - - - // Display captions container and button (for initialization) - show: function show() { - // Try to load the value from storage - var active = this.storage.get('captions'); - - // Otherwise fall back to the default config - if (!utils.is.boolean(active)) { - active = this.config.captions.active; - } else { - this.captions.active = active; - } - - if (active) { - utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true); - utils.toggleState(this.elements.buttons.captions, true); - } } }; @@ -3667,7 +3649,10 @@ var defaults$1 = { // Captions settings captions: { active: false, - language: (navigator.language || navigator.userLanguage).split('-')[0] + language: 'auto', + // Listen to new tracks added after Plyr is initialized. + // This is needed for streaming captions, but may result in unselectable options + update: false }, // Fullscreen settings @@ -3724,7 +3709,15 @@ var defaults$1 = { reset: 'Reset', disabled: 'Disabled', enabled: 'Enabled', - advertisement: 'Ad' + advertisement: 'Ad', + qualityBadge: { + 2160: '4K', + 1440: 'HD', + 1080: 'HD', + 720: 'HD', + 576: 'SD', + 480: 'SD' + } }, // URLs @@ -3812,9 +3805,8 @@ var defaults$1 = { display: { currentTime: '.plyr__time--current', duration: '.plyr__time--duration', - buffer: '.plyr__progress--buffer', - played: '.plyr__progress--played', - loop: '.plyr__progress--loop', + buffer: '.plyr__progress__buffer', + loop: '.plyr__progress__loop', // Used later volume: '.plyr__volume--display' }, progress: '.plyr__progress', @@ -4183,8 +4175,10 @@ var ui = { // Remove native controls ui.toggleNativeControls.call(this); - // Captions - captions.setup.call(this); + // Setup captions for HTML5 + if (this.isHTML5) { + captions.setup.call(this); + } // Reset volume this.volume = null; @@ -4237,6 +4231,12 @@ var ui = { if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) { ui.setPoster.call(this, this.poster); } + + // Manually set the duration if user has overridden it. + // The event listeners for it doesn't get called if preload is disabled (#701) + if (this.config.duration) { + controls.durationUpdate.call(this); + } }, @@ -7294,24 +7294,19 @@ var Plyr = function () { } // If the method is called without parameter, toggle based on current value - var show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active); - - // Nothing to change... - if (this.captions.active === show) { - return; - } - - // Set global - this.captions.active = show; + var active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active); // Toggle state - utils.toggleState(this.elements.buttons.captions, this.captions.active); + utils.toggleState(this.elements.buttons.captions, active); // Add class hook - utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active); + utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active); - // Trigger an event - utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); + // Update state and trigger event + if (active !== this.captions.active) { + this.captions.active = active; + utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); + } } /** @@ -7843,7 +7838,7 @@ var Plyr = function () { quality = Number(input); } - if (!utils.is.number(quality) || quality === 0) { + if (!utils.is.number(quality)) { quality = this.storage.get('quality'); } diff --git a/dist/plyr.js.map b/dist/plyr.js.map index f7baad99..b943e158 100644 --- a/dist/plyr.js.map +++ b/dist/plyr.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["define","this","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","assign","id","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","call","content","fetch","then","result","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.js","sourcesContent":["(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["define","this","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","assign","id","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","call","content","fetch","then","result","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","path","reduce","obj","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","toggleCaptions","bind","userLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","global","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","setLanguage","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.js","sourcesContent":["(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.language,\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Set toggled state\n this.toggleCaptions(active);\n\n // Watch changes to textTracks and update captions menu\n if (this.config.captions.update) {\n utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n update() {\n // Update tracks\n const tracks = captions.getTracks.call(this);\n this.options.captions = tracks.map(({language}) => language);\n\n // Set language if it hasn't been set already\n if (!this.language) {\n let { language } = this.config.captions;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n this.language = this.storage.get('language') || (language || '').toLowerCase();\n }\n\n // Toggle the class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/dist/plyr.min.js b/dist/plyr.min.js index b7c75152..b5f0fbf8 100644 --- a/dist/plyr.min.js +++ b/dist/plyr.min.js @@ -1,2 +1,2 @@ -"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var e,t,i=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,s){var a,l,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(l=o.createElement("link")).rel="stylesheet",l.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(l=o.createElement("img")).src=p:((l=o.createElement("script")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in l)try{l.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return r(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,l)&&o.head.appendChild(l)}function l(e,i,n){var l,o;if(i&&i.trim&&(l=i),o=(l?n:i)||{},l){if(l in t)throw"LoadJS";t[l]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,l=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<l;s++)r(e[s],n,i)}(e,function(e){a(o,e),s(l,e)},o)}return l.ready=function(e,t){return function(e,t){e=e.push?e:[e];var s,a,r,l=[],o=e.length,c=o;for(s=function(e,i){i.length&&l.push(e),--c||t(l)};o--;)a=e[o],(r=i[a])?s(a,r):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),l},l.done=function(e){s(e,[])},l.reset=function(){t={},i={},n={}},l.isDefined=function(e){return e in t},l},e.exports=i()}(e={exports:{}},e.exports),e.exports),n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),a=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var r,l=e[Symbol.iterator]();!(n=(r=l.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),l=function(){function e(t){n(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return s(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),o={html5:"html5",youtube:"youtube",vimeo:"vimeo"},c={audio:"audio",video:"video"},u={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var s=new Image,a=function(){delete s.onload,delete s.onerror,(s.naturalWidth>=t?i:n)(s)};Object.assign(s,{onload:a,onerror:a,src:e})})},loadScript:function(e){return new Promise(function(t,n){i(e,{success:t,error:n})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=l.supported,a=document.createElement("div");if(u.toggleHidden(a,!0),i&&a.setAttribute("id",t),s){var r=window.localStorage.getItem("cache-"+t);if(null!==r){var o=JSON.parse(r);return void c.call(a,o.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(s&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),c.call(a,e))}).catch(function(){})}}function c(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.innerText=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):u.is.element(e)&&u.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=r(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),r=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=l}}),i},toggleHidden:function(e,t){if(u.is.element(e)){var i=t;u.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(u.is.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var r=t.split(" "),l=a;d.passiveListeners&&(l={passive:s,capture:a}),r.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},format:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return u.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return u.is.string(i[t])?i[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),r=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(r)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,a({},t,{})),u.extend(e[t],s[t])):Object.assign(e,a({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?o.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?o.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=r(i,2),s=n[0],l=n[1];return Object.assign(e,a({},s,decodeURIComponent(l)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),r=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||r);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||r);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(t=document.createElement("input"),t.type="range","range"===t.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=p.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=p.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=p.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,r=e.playing;e.media.src=s[0].getAttribute("src"),e.media.load(),r&&e.play(),e.currentTime=a,u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(p.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=r(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},m=u.getBrowser(),g={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||m.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime),duration:u.getElement.call(this,this.config.selectors.display.duration)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=g.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",r):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),s.appendChild(a),s},createLabel:function(e,t){var i=h(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,r=void 0,l=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,r="play",o="pause",l="play",c="pause";break;case"mute":a=!0,r="mute",o="unmute",l="volume",c="muted";break;case"captions":a=!0,r="enableCaptions",o="disableCaptions",l="captions-off",c="captions-on";break;case"fullscreen":a=!0,r="enterFullscreen",o="exitFullscreen",l="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",r="play",l="play";break;default:r=s,l=e}return a?(i.appendChild(g.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(g.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(g.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(g.createLabel.call(this,r,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(g.createIcon.call(this,l)),i.appendChild(g.createLabel.call(this,r))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},h(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,g.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=h("played",this.config);break;case"buffer":n=h("buffered",this.config)}i.innerText="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.getAttributesFromSelector(this.config.selectors.display[e]),i=u.createElement("div",u.extend(t,{class:"plyr__time "+t.class,"aria-label":h(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],r=u.createElement("li"),l=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{hidden:""});l.appendChild(o),l.appendChild(c),l.insertAdjacentHTML("beforeend",n),u.is.element(s)&&l.appendChild(s),r.appendChild(l),t.appendChild(r)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.innerText=u.formatTime(t,n,i)}},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&g.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,g.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&u.is.event(e)){var i=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&g.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":!function(e,i){var n=u.is.number(i)?i:0,s=u.is.element(e)?e:t.elements.display.buffer;if(u.is.element(s)){s.value=n;var a=s.getElementsByTagName("span")[0];u.is.element(a)&&(a.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),m.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),g.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;g.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||g.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&g.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&g.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),g.updateSeekTooltip.call(this)}},toggleTab:function(e,t){u.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(g.toggleTab.call(this,"quality",n),g.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=g.getLabel.call(t,"quality",e);g.createMenuItem.call(t,e,i,"quality",n,function(e){var i="";switch(e){case 2160:i="4K";break;case 1440:case 1080:case 720:i="HD";break;case 576:case 480:i="SD"}return i.length?g.createBadge.call(t,i):null}(e))}),g.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?h("normal",this.config):t+"×";case"quality":return u.is.number(t)?t+"p":u.toTitleCase(t);case"captions":return f.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=g.getLabel.call(this,e,s);var r=a&&a.querySelector('input[value="'+s+'"]');u.is.element(r)&&(r.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=f.getTracks.call(this).length;if(g.toggleTab.call(this,"captions",i),u.emptyElement(t),g.checkMenu.call(this),i){var n=f.getTracks.call(this).map(function(t){return{language:u.is.empty(t.language)?"enabled":t.language,label:f.getLabel.call(e,t)}});n.unshift({language:"",label:h("disabled",this.config)}),n.forEach(function(i){g.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?g.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=n.map(function(e){return e.language}),g.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(g.toggleTab.call(this,"speed",i),g.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.emptyElement(n),this.options.speed.forEach(function(e){var i=g.getLabel.call(t,"speed",e);g.createMenuItem.call(t,e,n,"speed",i)}),g.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&t.hasAttribute("hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(u.toggleHidden(t,!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,i=document.getElementById(e);if(u.is.element(i)&&"tabpanel"===i.getAttribute("role")){var n=t.querySelector('[role="tabpanel"]:not([hidden])'),s=n.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+n.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){s.style.width=n.scrollWidth+"px",s.style.height=n.scrollHeight+"px";var a=g.getTabSize.call(this,i);u.on(s,u.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",u.off(s,u.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}u.toggleHidden(n,!0),n.setAttribute("tabindex",-1),u.toggleHidden(i,!1);var r=u.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(r).forEach(function(e){e.setAttribute("aria-expanded",!0)}),i.removeAttribute("tabindex"),i.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(g.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(g.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(g.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(g.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=g.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(g.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(g.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(g.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(g.createButton.call(this,"mute")),this.config.controls.includes("volume")){var r=u.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},o=g.createRange.call(this,"volume",u.extend(l,{id:"plyr-volume-"+e.id}));r.appendChild(o.label),r.appendChild(o.input),this.elements.volume=r,i.appendChild(r)}if(this.config.controls.includes("captions")&&i.appendChild(g.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(g.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=u.createElement("div"),y=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),v=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),h(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),v.appendChild(n),t.elements.settings.tabs[i]=n}),y.appendChild(v),f.appendChild(y),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},h(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),f.appendChild(n),t.elements.settings.panes[i]=n}),m.appendChild(f),c.appendChild(m),i.appendChild(c),this.elements.settings.form=m,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(g.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(g.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(g.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(g.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&g.setQualityMenu.call(this,p.getQualityOptions.call(this)),g.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=g.getIconUrl.call(this);t.cors&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;u.is.string(this.config.controls)||u.is.element(this.config.controls)?i=this.config.controls:u.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=g.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:f.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=r(e,2),n=i[0],s=i[1];t=u.replaceAll(t,"{"+n+"}",s)}),t};s&&(u.is.string(this.config.controls)?i=a(i):u.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var l=void 0;if(u.is.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),u.is.element(l)||(l=this.elements.container),u.is.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||g.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(l),this.config.tooltips.controls){var o=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(o).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},f={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(f.getTracks.call(this)));var i=f.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}f.setLanguage.call(this),f.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){f.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return f.setCue.call(e,t)}),t.mode="hidden"});var t=f.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&f.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=f.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=u.getElement.call(this,"track[default]")),i)||(i=r(t,1)[0]);return i},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=f.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?h("enabled",this.config):e.language.toUpperCase():t.label:h("disabled",this.config)},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===f.getCurrentTrack.call(this)&&(u.is.cue(n)?f.setText.call(this,n.getCueAsHTML()):f.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.innerText=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}},y=function(){},v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return s(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):y}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):y}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):y}}]),e}(),b={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.9/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},k=u.getBrowser();function w(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),k.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function E(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),w.call(this)}var T=function(){function e(t){var i=this;n(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){w.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){u.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return s(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(k.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():E.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(k.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else E.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return k.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),A=u.getBrowser(),C={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void C.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(g.inject.call(this),this.listeners.controls()),C.toggleNativeControls.call(this),f.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,g.updateVolume.call(this),g.timeUpdate.call(this),C.checkPlaying.call(this),u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.isIos,A.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),C.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&C.setPoster.call(this,this.poster)},setTitle:function(){var e=h("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;var i=u.is.empty(this.config.title)?"video":this.config.title,n=h("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){u.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!u.is.element(this.elements.poster))return Promise.reject();var i=u.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),C.togglePoster.call(t,!0),e});return i.catch(function(){return C.togglePoster.call(t,!1)}),i},checkPlaying:function(e){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),u.toggleState(this.elements.buttons.play,this.playing),u.is.event(e)&&"timeupdate"===e.type||C.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),C.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},S=u.getBrowser(),P=function(){function e(t){n(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return s(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){g.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),u.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.player.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(C.toggleControls.call(e.player,!0),n=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},n)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking seeked",function(t){return g.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return g.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),u.on(this.player.media,"progress playing seeking seeked",function(t){return g.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return g.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return C.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return C.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){g.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){g.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=S.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],l=e.player.config.listeners[a],o=u.is.function(l);u.on(t,n,function(e){return i(e,s,a)},r&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){g.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var n=function(){var t="plyr-settings-"+e.player.id+"-home";g.showTab.call(e.player,t)};if(u.matches(t.target,e.player.config.selectors.inputs.language))i(t,function(){e.player.language=t.target.value,n()},"language");else if(u.matches(t.target,e.player.config.selectors.inputs.quality))i(t,function(){e.player.quality=t.target.value,n()},"quality");else if(u.matches(t.target,e.player.config.selectors.inputs.speed))i(t,function(){e.player.speed=parseFloat(t.target.value),n()},"speed");else{var s=t.target;g.showTab.call(e.player,s.getAttribute("aria-controls"))}}),n(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var i=e.player.elements.progress.getBoundingClientRect(),n=100/i.width*(t.pageX-i.left);t.currentTarget.setAttribute("seek-value",n)}),n(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var i=t.currentTarget,n=i.hasAttribute("play-on-seeked"),s=["mouseup","touchend","keyup"].includes(t.type);n&&s?(i.removeAttribute("play-on-seeked"),e.player.play()):!s&&e.player.playing&&(i.setAttribute("play-on-seeked",""),e.player.pause())}),n(this.player.elements.inputs.seek,t,function(t){var i=t.currentTarget,n=i.getAttribute("seek-value");u.is.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),e.player.currentTime=n/i.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,g.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),S.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){g.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return g.updateSeekTooltip.call(e.player,t)}),n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){var i=e.player,n=i.config,s=i.elements,a=i.timers;if(u.toggleClass(s.controls,n.classNames.noTransition,"focusin"===t.type),C.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){u.toggleClass(s.controls,n.classNames.noTransition,!1)},0);var r=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},r)}}),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function x(e){this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var N={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),N.setAspectRatio.call(this),u.is.object(window.Vimeo)?N.ready.call(this):u.loadScript(this.config.urls.vimeo.sdk).then(function(){N.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(t.config.attributes.embed.id));var a=u.parseVimeoId(s),r=u.createElement("iframe"),l=u.format(t.config.urls.vimeo.iframe,a,n);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var o=u.createElement("div",{class:t.config.classNames.embedContainer});o.appendChild(r),t.media=u.replaceElement(o,t.media),u.fetch(u.format(t.config.urls.vimeo.api,a),"json").then(function(e){if(!u.is.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",C.setPoster.call(t,i.href)}}),t.embed=new window.Vimeo.Player(r,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return x.call(t,!0),t.embed.play()},t.media.pause=function(){return x.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.embed,n=t.media,s=t.paused,a=t.volume;n.seeking=!0,u.dispatchEvent.call(t,n,"seeking"),Promise.resolve(s&&i.setVolume(0)).then(function(){return i.setCurrentTime(e)}).then(function(){return s&&i.pause()}).then(function(){return s&&i.setVolume(a)}).catch(function(){})}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&g.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var y=void 0;t.embed.getVideoUrl().then(function(e){y=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return y}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);N.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,C.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,f.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),f.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){x.call(t,!0),u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){x.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return C.build.call(t)},0)}};function L(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function M(e){this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var I={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),I.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?I.ready.call(this):(u.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){I.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void C.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s=u.format(this.config.urls.youtube.api,e,n);u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,C.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media);var r=function(e){return"https://img.youtube.com/vi/"+n+"/"+e+"default.jpg"};u.loadImage(r("maxres"),121).catch(function(){return u.loadImage(r("sd"),121)}).catch(function(){return u.loadImage(r("hq"))}).then(function(t){return C.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;I.getTitle.call(e,n),e.media.play=function(){M.call(e,!0),i.playVideo()},e.media.pause=function(){M.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return L(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(L(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return C.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,u.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:M.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused?e.media.pause():(M.call(e,!0),u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),g.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return L(e)})))));break;case 2:e.muted||e.embed.unMute(),M.call(e,!1)}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},q={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper),this.elements.poster=u.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":I.setup.call(this);break;case"vimeo":N.setup.call(this)}else this.isHTML5&&p.extend.call(this);else this.debug.warn("No media element found!")}},_=function(){function e(t){var i=this;n(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return s(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=h("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!u.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),O={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(e){var t=this;u.is.object(e)&&"sources"in e&&e.sources.length?(p.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],u.removeElement(t.media),t.media=null,u.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=u.is.empty(e.sources[0].provider)?o.html5:e.sources[0].provider,t.supported=d.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=u.createElement("video");break;case"html5:audio":t.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=u.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),u.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),u.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),C.addStyleHook.call(t),t.isHTML5&&O.insertElements.call(t,"source",e.sources),t.config.title=e.title,q.setup.call(t),t.isHTML5&&("tracks"in e&&O.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&C.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},j=function(){function e(t,i){var s=this;if(n(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=t,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},b,e.defaults,i||{},function(){try{return JSON.parse(s.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new v(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var r=this.media.tagName.toLowerCase(),p=null,h=null,m=null;switch(r){case"div":if(p=this.media.querySelector("iframe"),u.is.element(p)){if(h=p.getAttribute("src"),this.provider=u.getProviderByUrl(h),this.elements.container=this.media,this.media=p,this.elements.container.className="",m=u.getUrlParams(h),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(o).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=c.video;break;case"video":case"audio":this.type=r,this.provider=o.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new P(this),this.storage=new l(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),C.addStyleHook.call(this),q.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){s.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&C.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new T(this),this.ads=new _(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return s(e,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=u.hasClass(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,n=u.toggleClass(this.elements.container,this.config.classNames.hideControls,i);if(n&&this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)&&g.toggleMenu.call(this,!1),n!==t){var s=n?"controlshidden":"controlsshown";u.dispatchEvent.call(this,this.media,s)}return!n}return!1}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),C.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===o.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===o.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===o.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===c.video)}},{key:"isAudio",get:function(){return Boolean(this.type===c.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=u.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration||0;return e||t}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)&&0!==t||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){O.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?C.setPoster.call(this,e):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e))if(u.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,f.setText.call(this,null),f.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return u.is.string(t)?n=Array.from(document.querySelectorAll(t)):u.is.nodeList(t)?n=Array.from(t):u.is.array(t)&&(n=t.filter(function(e){return u.is.element(e)})),u.is.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return j.defaults=u.cloneDeep(b),j}); +"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var e,t,i=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,s){var a,l,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(l=o.createElement("link")).rel="stylesheet",l.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(l=o.createElement("img")).src=p:((l=o.createElement("script")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in l)try{l.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return r(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,l)&&o.head.appendChild(l)}function l(e,i,n){var l,o;if(i&&i.trim&&(l=i),o=(l?n:i)||{},l){if(l in t)throw"LoadJS";t[l]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,l=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<l;s++)r(e[s],n,i)}(e,function(e){a(o,e),s(l,e)},o)}return l.ready=function(e,t){return function(e,t){e=e.push?e:[e];var s,a,r,l=[],o=e.length,c=o;for(s=function(e,i){i.length&&l.push(e),--c||t(l)};o--;)a=e[o],(r=i[a])?s(a,r):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),l},l.done=function(e){s(e,[])},l.reset=function(){t={},i={},n={}},l.isDefined=function(e){return e in t},l},e.exports=i()}(e={exports:{}},e.exports),e.exports),n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),a=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var r,l=e[Symbol.iterator]();!(n=(r=l.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),l=function(){function e(t){n(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return s(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),o={html5:"html5",youtube:"youtube",vimeo:"vimeo"},c={audio:"audio",video:"video"},u={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var s=new Image,a=function(){delete s.onload,delete s.onerror,(s.naturalWidth>=t?i:n)(s)};Object.assign(s,{onload:a,onerror:a,src:e})})},loadScript:function(e){return new Promise(function(t,n){i(e,{success:t,error:n})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=l.supported,a=document.createElement("div");if(u.toggleHidden(a,!0),i&&a.setAttribute("id",t),s){var r=window.localStorage.getItem("cache-"+t);if(null!==r){var o=JSON.parse(r);return void c.call(a,o.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(s&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),c.call(a,e))}).catch(function(){})}}function c(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.innerText=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):u.is.element(e)&&u.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=r(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),r=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=l}}),i},toggleHidden:function(e,t){if(u.is.element(e)){var i=t;u.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(u.is.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var r=t.split(" "),l=a;d.passiveListeners&&(l={passive:s,capture:a}),r.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},format:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return u.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return u.is.string(i[t])?i[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),r=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(r)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,a({},t,{})),u.extend(e[t],s[t])):Object.assign(e,a({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},getDeep:function(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?o.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?o.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=r(i,2),s=n[0],l=n[1];return Object.assign(e,a({},s,decodeURIComponent(l)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),r=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||r);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||r);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(t=document.createElement("input"),t.type="range","range"===t.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=p.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=p.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=p.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,r=e.playing;e.media.src=s[0].getAttribute("src");e.on("loadedmetadata",function t(){e.currentTime=a,e.off("loadedmetadata",t)}),e.media.load(),r&&e.play(),u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(p.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t))return"";var i=u.getDeep(t.i18n,e);if(u.is.empty(i))return"";var n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=r(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},m=u.getBrowser(),g={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||m.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime),duration:u.getElement.call(this,this.config.selectors.display.duration)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=g.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",r):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),s.appendChild(a),s},createLabel:function(e,t){var i=h(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,r=void 0,l=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,r="play",o="pause",l="play",c="pause";break;case"mute":a=!0,r="mute",o="unmute",l="volume",c="muted";break;case"captions":a=!0,r="enableCaptions",o="disableCaptions",l="captions-off",c="captions-on";break;case"fullscreen":a=!0,r="enterFullscreen",o="exitFullscreen",l="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",r="play",l="play";break;default:r=s,l=e}return a?(i.appendChild(g.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(g.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(g.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(g.createLabel.call(this,r,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(g.createIcon.call(this,l)),i.appendChild(g.createLabel.call(this,r))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},h(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,g.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=h("played",this.config);break;case"buffer":n=h("buffered",this.config)}i.innerText="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.getAttributesFromSelector(this.config.selectors.display[e]),i=u.createElement("div",u.extend(t,{class:"plyr__time "+t.class,"aria-label":h(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],r=u.createElement("li"),l=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{hidden:""});l.appendChild(o),l.appendChild(c),l.insertAdjacentHTML("beforeend",n),u.is.element(s)&&l.appendChild(s),r.appendChild(l),t.appendChild(r)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.innerText=u.formatTime(t,n,i)}},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&g.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,g.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&u.is.event(e)){var i=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&g.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":!function(e,i){var n=u.is.number(i)?i:0,s=u.is.element(e)?e:t.elements.display.buffer;if(u.is.element(s)){s.value=n;var a=s.getElementsByTagName("span")[0];u.is.element(a)&&(a.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),m.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),g.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;g.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||g.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&g.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&g.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),g.updateSeekTooltip.call(this)}},toggleTab:function(e,t){u.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(g.toggleTab.call(this,"quality",n),g.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=g.getLabel.call(t,"quality",e);g.createMenuItem.call(t,e,i,"quality",n,function(e){var i=h("qualityBadge."+e,t.config);return i.length?g.createBadge.call(t,i):null}(e))}),g.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?h("normal",this.config):t+"×";case"quality":if(u.is.number(t)){var i=h("qualityLabel."+t,this.config);return i.length?i:t+"p"}return u.toTitleCase(t);case"captions":return f.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=g.getLabel.call(this,e,s);var r=a&&a.querySelector('input[value="'+s+'"]');u.is.element(r)&&(r.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=f.getTracks.call(this).length;if(g.toggleTab.call(this,"captions",i),u.emptyElement(t),g.checkMenu.call(this),i){var n=f.getTracks.call(this).map(function(t){return{language:u.is.empty(t.language)?"enabled":t.language,label:f.getLabel.call(e,t)}});n.unshift({language:"",label:h("disabled",this.config)}),n.forEach(function(i){g.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?g.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.language)}),g.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(g.toggleTab.call(this,"speed",i),g.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.emptyElement(n),this.options.speed.forEach(function(e){var i=g.getLabel.call(t,"speed",e);g.createMenuItem.call(t,e,n,"speed",i)}),g.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&t.hasAttribute("hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(u.toggleHidden(t,!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,i=document.getElementById(e);if(u.is.element(i)&&"tabpanel"===i.getAttribute("role")){var n=t.querySelector('[role="tabpanel"]:not([hidden])'),s=n.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+n.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){s.style.width=n.scrollWidth+"px",s.style.height=n.scrollHeight+"px";var a=g.getTabSize.call(this,i);u.on(s,u.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",u.off(s,u.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}u.toggleHidden(n,!0),n.setAttribute("tabindex",-1),u.toggleHidden(i,!1);var r=u.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(r).forEach(function(e){e.setAttribute("aria-expanded",!0)}),i.removeAttribute("tabindex"),i.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(g.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(g.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(g.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(g.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=g.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(g.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(g.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(g.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(g.createButton.call(this,"mute")),this.config.controls.includes("volume")){var r=u.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},o=g.createRange.call(this,"volume",u.extend(l,{id:"plyr-volume-"+e.id}));r.appendChild(o.label),r.appendChild(o.input),this.elements.volume=r,i.appendChild(r)}if(this.config.controls.includes("captions")&&i.appendChild(g.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(g.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=u.createElement("div"),y=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),v=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),h(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),v.appendChild(n),t.elements.settings.tabs[i]=n}),y.appendChild(v),f.appendChild(y),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},h(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),f.appendChild(n),t.elements.settings.panes[i]=n}),m.appendChild(f),c.appendChild(m),i.appendChild(c),this.elements.settings.form=m,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(g.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(g.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(g.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(g.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&g.setQualityMenu.call(this,p.getQualityOptions.call(this)),g.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=g.getIconUrl.call(this);t.cors&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;u.is.string(this.config.controls)||u.is.element(this.config.controls)?i=this.config.controls:u.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=g.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:f.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=r(e,2),n=i[0],s=i[1];t=u.replaceAll(t,"{"+n+"}",s)}),t};s&&(u.is.string(this.config.controls)?i=a(i):u.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var l=void 0;if(u.is.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),u.is.element(l)||(l=this.elements.container),u.is.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||g.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(l),this.config.tooltips.controls){var o=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(o).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},f={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this);else{if(u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.getBrowser().isIE&&window.URL){var e=this.media.querySelectorAll("track");Array.from(e).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}var t=this.storage.get("captions");u.is.boolean(t)||(t=this.config.captions.active),this.toggleCaptions(t),this.config.captions.update&&u.on(this.media.textTracks,"addtrack removetrack",f.update.bind(this)),setTimeout(f.update.bind(this),0)}},update:function(){var e=f.getTracks.call(this);if(this.options.captions=e.map(function(e){return e.language}),!this.language){var t=this.config.captions.language;if("auto"===t){var i=(navigator.language||navigator.userLanguage).split("-");t=r(i,1)[0]}this.language=this.storage.get("language")||(t||"").toLowerCase()}u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(f.getTracks.call(this))),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this)},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){f.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return f.setCue.call(e,t)}),t.mode="hidden"});var t=f.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&f.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=f.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=u.getElement.call(this,"track[default]")),i)||(i=r(t,1)[0]);return i},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=f.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?h("enabled",this.config):e.language.toUpperCase():t.label:h("disabled",this.config)},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===f.getCurrentTrack.call(this)&&(u.is.cue(n)?f.setText.call(this,n.getCueAsHTML()):f.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.innerText=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")}},y=function(){},v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return s(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):y}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):y}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):y}}]),e}(),b={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.9/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},k=u.getBrowser();function w(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),k.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function E(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),w.call(this)}var T=function(){function e(t){var i=this;n(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){w.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){u.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return s(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(k.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():E.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(k.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else E.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return k.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),A=u.getBrowser(),C={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void C.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(g.inject.call(this),this.listeners.controls()),C.toggleNativeControls.call(this),this.isHTML5&&f.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,g.updateVolume.call(this),g.timeUpdate.call(this),C.checkPlaying.call(this),u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.isIos,A.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),C.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&C.setPoster.call(this,this.poster),this.config.duration&&g.durationUpdate.call(this)},setTitle:function(){var e=h("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;var i=u.is.empty(this.config.title)?"video":this.config.title,n=h("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){u.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!u.is.element(this.elements.poster))return Promise.reject();var i=u.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),C.togglePoster.call(t,!0),e});return i.catch(function(){return C.togglePoster.call(t,!1)}),i},checkPlaying:function(e){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),u.toggleState(this.elements.buttons.play,this.playing),u.is.event(e)&&"timeupdate"===e.type||C.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),C.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},S=u.getBrowser(),P=function(){function e(t){n(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return s(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){g.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),u.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.player.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(C.toggleControls.call(e.player,!0),n=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},n)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking seeked",function(t){return g.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return g.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),u.on(this.player.media,"progress playing seeking seeked",function(t){return g.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return g.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return C.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return C.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){g.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){g.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=S.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],l=e.player.config.listeners[a],o=u.is.function(l);u.on(t,n,function(e){return i(e,s,a)},r&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){g.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var n=function(){var t="plyr-settings-"+e.player.id+"-home";g.showTab.call(e.player,t)};if(u.matches(t.target,e.player.config.selectors.inputs.language))i(t,function(){e.player.language=t.target.value,n()},"language");else if(u.matches(t.target,e.player.config.selectors.inputs.quality))i(t,function(){e.player.quality=t.target.value,n()},"quality");else if(u.matches(t.target,e.player.config.selectors.inputs.speed))i(t,function(){e.player.speed=parseFloat(t.target.value),n()},"speed");else{var s=t.target;g.showTab.call(e.player,s.getAttribute("aria-controls"))}}),n(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var i=e.player.elements.progress.getBoundingClientRect(),n=100/i.width*(t.pageX-i.left);t.currentTarget.setAttribute("seek-value",n)}),n(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var i=t.currentTarget,n=i.hasAttribute("play-on-seeked"),s=["mouseup","touchend","keyup"].includes(t.type);n&&s?(i.removeAttribute("play-on-seeked"),e.player.play()):!s&&e.player.playing&&(i.setAttribute("play-on-seeked",""),e.player.pause())}),n(this.player.elements.inputs.seek,t,function(t){var i=t.currentTarget,n=i.getAttribute("seek-value");u.is.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),e.player.currentTime=n/i.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,g.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),S.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){g.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return g.updateSeekTooltip.call(e.player,t)}),n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){var i=e.player,n=i.config,s=i.elements,a=i.timers;if(u.toggleClass(s.controls,n.classNames.noTransition,"focusin"===t.type),C.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){u.toggleClass(s.controls,n.classNames.noTransition,!1)},0);var r=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},r)}}),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function x(e){this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var N={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),N.setAspectRatio.call(this),u.is.object(window.Vimeo)?N.ready.call(this):u.loadScript(this.config.urls.vimeo.sdk).then(function(){N.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(t.config.attributes.embed.id));var a=u.parseVimeoId(s),r=u.createElement("iframe"),l=u.format(t.config.urls.vimeo.iframe,a,n);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var o=u.createElement("div",{class:t.config.classNames.embedContainer});o.appendChild(r),t.media=u.replaceElement(o,t.media),u.fetch(u.format(t.config.urls.vimeo.api,a),"json").then(function(e){if(!u.is.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",C.setPoster.call(t,i.href)}}),t.embed=new window.Vimeo.Player(r,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return x.call(t,!0),t.embed.play()},t.media.pause=function(){return x.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.embed,n=t.media,s=t.paused,a=t.volume;n.seeking=!0,u.dispatchEvent.call(t,n,"seeking"),Promise.resolve(s&&i.setVolume(0)).then(function(){return i.setCurrentTime(e)}).then(function(){return s&&i.pause()}).then(function(){return s&&i.setVolume(a)}).catch(function(){})}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&g.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var y=void 0;t.embed.getVideoUrl().then(function(e){y=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return y}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);N.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,C.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,f.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),f.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){x.call(t,!0),u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){x.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return C.build.call(t)},0)}};function L(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function M(e){this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var I={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),I.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?I.ready.call(this):(u.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){I.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void C.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s=u.format(this.config.urls.youtube.api,e,n);u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,C.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media);var r=function(e){return"https://img.youtube.com/vi/"+n+"/"+e+"default.jpg"};u.loadImage(r("maxres"),121).catch(function(){return u.loadImage(r("sd"),121)}).catch(function(){return u.loadImage(r("hq"))}).then(function(t){return C.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;I.getTitle.call(e,n),e.media.play=function(){M.call(e,!0),i.playVideo()},e.media.pause=function(){M.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return L(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(L(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return C.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,u.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:M.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused?e.media.pause():(M.call(e,!0),u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),g.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return L(e)})))));break;case 2:e.muted||e.embed.unMute(),M.call(e,!1)}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},q={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper),this.elements.poster=u.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":I.setup.call(this);break;case"vimeo":N.setup.call(this)}else this.isHTML5&&p.extend.call(this);else this.debug.warn("No media element found!")}},_=function(){function e(t){var i=this;n(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return s(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=h("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!u.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),O={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(e){var t=this;u.is.object(e)&&"sources"in e&&e.sources.length?(p.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],u.removeElement(t.media),t.media=null,u.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=u.is.empty(e.sources[0].provider)?o.html5:e.sources[0].provider,t.supported=d.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=u.createElement("video");break;case"html5:audio":t.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=u.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),u.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),u.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),C.addStyleHook.call(t),t.isHTML5&&O.insertElements.call(t,"source",e.sources),t.config.title=e.title,q.setup.call(t),t.isHTML5&&("tracks"in e&&O.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&C.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},j=function(){function e(t,i){var s=this;if(n(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=t,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},b,e.defaults,i||{},function(){try{return JSON.parse(s.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new v(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var r=this.media.tagName.toLowerCase(),p=null,h=null,m=null;switch(r){case"div":if(p=this.media.querySelector("iframe"),u.is.element(p)){if(h=p.getAttribute("src"),this.provider=u.getProviderByUrl(h),this.elements.container=this.media,this.media=p,this.elements.container.className="",m=u.getUrlParams(h),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(o).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=c.video;break;case"video":case"audio":this.type=r,this.provider=o.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new P(this),this.storage=new l(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),C.addStyleHook.call(this),q.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){s.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&C.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new T(this),this.ads=new _(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return s(e,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);u.toggleState(this.elements.buttons.captions,t),u.toggleClass(this.elements.container,this.config.classNames.captions.active,t),t!==this.captions.active&&(this.captions.active=t,u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=u.hasClass(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,n=u.toggleClass(this.elements.container,this.config.classNames.hideControls,i);if(n&&this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)&&g.toggleMenu.call(this,!1),n!==t){var s=n?"controlshidden":"controlsshown";u.dispatchEvent.call(this,this.media,s)}return!n}return!1}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),C.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===o.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===o.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===o.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===c.video)}},{key:"isAudio",get:function(){return Boolean(this.type===c.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=u.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration||0;return e||t}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){O.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?C.setPoster.call(this,e):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e))if(u.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,f.setText.call(this,null),f.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return u.is.string(t)?n=Array.from(document.querySelectorAll(t)):u.is.nodeList(t)?n=Array.from(t):u.is.array(t)&&(n=t.filter(function(e){return u.is.element(e)})),u.is.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return j.defaults=u.cloneDeep(b),j}); //# sourceMappingURL=plyr.min.js.map diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map index 0d99c457..a2ed4c75 100644 --- a/dist/plyr.min.js.map +++ b/dist/plyr.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","Storage","player","enabled","config","storage","key","supported","this","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","object","get","extend","setItem","stringify","removeItem","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","minWidth","image","Image","handler","naturalWidth","assign","id","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","data","content","fetch","then","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","_ref2","value","sel","existingAttributes","existing","split","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","_len","_key","toString","match","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","source","shift","defineProperty","apply","concat","toConsumableArray","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","cors","URL","iconUrl","location","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","_this","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","_this7","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","blob","createObjectURL","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","_this11","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"2TAiJcA,mBCjJb,IAAeC,EAAAA,EAQR,WAMR,IAAIC,EAAU,aACVC,KACAC,KACAC,KAmDJ,SAASC,EAAQC,EAAUC,GAEzB,GAAKD,EAAL,CAEA,IAAIE,EAAIJ,EAAoBE,GAM5B,GAHAH,EAAkBG,GAAYC,EAGzBC,EAGL,KAAOA,EAAEC,QACPD,EAAE,GAAGF,EAAUC,GACfC,EAAEE,OAAO,EAAG,IAUhB,SAASC,EAAiBC,EAAMC,GAE1BD,EAAKE,OAAMF,GAAQG,QAASH,IAG5BC,EAAaJ,QAASG,EAAKI,OAASf,GAASY,IAC3CD,EAAKG,SAAWd,GAASW,GASjC,SAASK,EAASC,EAAMC,EAAYP,EAAMQ,GACxC,IAKIC,EACAC,EANAC,EAAMC,SACNC,EAAQb,EAAKa,MACbC,GAAYd,EAAKe,YAAc,GAAK,EACpCC,EAAmBhB,EAAKiB,QAAU5B,EAClC6B,EAAeZ,EAAKa,QAAQ,cAAe,IAI/CX,EAAWA,GAAY,EAEnB,iBAAiBY,KAAKd,IACxBG,GAAQ,GAGRC,EAAIC,EAAIU,cAAc,SACpBC,IAAM,aACRZ,EAAEa,KAAOL,GACA,+BAA+BE,KAAKd,IAE7CI,EAAIC,EAAIU,cAAc,QACpBG,IAAMN,IAGRR,EAAIC,EAAIU,cAAc,WACpBG,IAAMlB,EACRI,EAAEG,WAAkBY,IAAVZ,GAA6BA,GAGzCH,EAAEgB,OAAShB,EAAEiB,QAAUjB,EAAEkB,aAAe,SAAUC,GAChD,IAAIC,EAASD,EAAGE,KAAK,GAIrB,GAAItB,GAAS,cAAeC,EAC1B,IACOA,EAAEsB,MAAMC,QAAQpC,SAAQiC,EAAS,KACtC,MAAOI,GAGPJ,EAAS,IAKb,GAAc,KAAVA,IAEFtB,GAAY,GAGGM,EACb,OAAOT,EAASC,EAAMC,EAAYP,EAAMQ,GAK5CD,EAAWD,EAAMwB,EAAQD,EAAGM,oBAII,IAA9BnB,EAAiBV,EAAMI,IAAcC,EAAIyB,KAAKC,YAAY3B,GA+ChE,SAAS4B,EAAOC,EAAOC,EAAMC,GAC3B,IAAI/C,EACAM,EASJ,GANIwC,GAAQA,EAAKE,OAAMhD,EAAW8C,GAGlCxC,GAAQN,EAAW+C,EAAOD,OAGtB9C,EAAU,CACZ,GAAIA,KAAYJ,EACd,KAAM,SAENA,EAAcI,IAAY,GArDhC,SAAmB6C,EAAOhC,EAAYP,GAIpC,IAGI2C,EACAC,EAJAC,GAFJN,EAAQA,EAAMO,KAAOP,GAASA,IAEP1C,OACnBqC,EAAIW,EACJlD,KAqBJ,IAhBAgD,EAAK,SAASrC,EAAMwB,EAAQK,GAM1B,GAJc,KAAVL,GAAenC,EAAcmD,KAAKxC,GAIxB,KAAVwB,EAAe,CACjB,IAAIK,EACC,OADiBxC,EAAcmD,KAAKxC,KAI3CuC,GACiBtC,EAAWZ,IAIzBiD,EAAE,EAAGA,EAAIV,EAAGU,IAAKvC,EAASkC,EAAMK,GAAID,EAAI3C,GA+B7C+C,CAAUR,EAAO,SAAU5C,GAEzBI,EAAiBC,EAAML,GAGvBF,EAAQC,EAAUC,IACjBK,GAiDL,OAxCAsC,EAAOU,MAAQ,SAAeC,EAAMjD,GAOlC,OAxOF,SAAmBkD,EAAW3C,GAE5B2C,EAAYA,EAAUJ,KAAOI,GAAaA,GAE1C,IAGIP,EACAjD,EACAyD,EALAlD,KACA2C,EAAIM,EAAUrD,OACdgD,EAAaD,EAejB,IARAD,EAAK,SAAUjD,EAAUC,GACnBA,EAAcE,QAAQI,EAAa6C,KAAKpD,KAE5CmD,GACiBtC,EAAWN,IAIvB2C,KACLlD,EAAWwD,EAAUN,IAGrBO,EAAI5D,EAAkBG,IAEpBiD,EAAGjD,EAAUyD,IAKX3D,EAAoBE,GAAYF,EAAoBE,QACtDoD,KAAKH,GAkMTS,CAAUH,EAAM,SAAUhD,GAExBF,EAAiBC,EAAMC,KAGlBqC,GAQTA,EAAOe,KAAO,SAAc3D,GAC1BD,EAAQC,OAOV4C,EAAOgB,MAAQ,WACbhE,KACAC,KACAC,MAQF8C,EAAOiB,UAAY,SAAmB7D,GACpC,OAAOA,KAAYJ,GAKdgD,GA9RHkB,EAAAC,QAAiBrE,05BCEfsE,EAAAA,sBACUC,kBACHC,QAAUD,EAAOE,OAAOC,QAAQF,aAChCG,IAAMJ,EAAOE,OAAOC,QAAQC,0CAuBjCA,OACKL,EAAQM,YAAcC,KAAKL,eACrB,SAGLM,EAAQC,OAAOC,aAAaC,QAAQJ,KAAKF,QAE3CO,EAAMC,GAAGC,MAAMN,UACR,SAGLO,EAAOC,KAAKC,MAAMT,UAEjBI,EAAMC,GAAGK,OAAOb,IAAQA,EAAIlE,OAAS4E,EAAKV,GAAOU,8BAGxDI,MAEKnB,EAAQM,WAAcC,KAAKL,SAK3BU,EAAMC,GAAGM,OAAOA,QAKjBf,EAAUG,KAAKa,MAGfR,EAAMC,GAAGC,MAAMV,aAKbiB,OAAOjB,EAASe,UAGfT,aAAaY,QAAQf,KAAKF,IAAKW,KAAKO,UAAUnB,kDAxD3C,iBAAkBK,eACb,gBAOJC,aAAaY,QAJP,UAAA,kBAKNZ,aAAac,WALP,YAON,EACT,MAAOxE,UACE,SAtBbgD,GCFOyB,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCHLd,cAEE,SACOe,UACIpB,KAAKqB,eAAeD,KAAWE,eAF1C,SAIOF,UACIpB,KAAKqB,eAAeD,KAAWG,SAAWA,OAAOC,MAAMJ,WALlE,SAOOA,UACIpB,KAAKqB,eAAeD,KAAWK,gBAR1C,SAUQL,UACGpB,KAAKqB,eAAeD,KAAWM,kBAX1C,SAaSN,UACEpB,KAAKqB,eAAeD,KAAWO,gBAd1C,SAgBMP,UACMpB,KAAK4B,gBAAgBR,IAAUS,MAAMC,QAAQV,YAjBzD,SAmBQA,UACGpB,KAAK+B,WAAWX,EAAOY,mBApBlC,SAsBSZ,UACEpB,KAAK+B,WAAWX,EAAOa,mBAvBlC,SAyBQb,UACGpB,KAAK+B,WAAWX,EAAOc,mBA1BlC,SA4BSd,UACEpB,KAAKqB,eAAeD,KAAWe,YA7B1C,SA+BMf,UACKpB,KAAK+B,WAAWX,EAAOgB,YAhClC,SAkCIhB,UACOpB,KAAK+B,WAAWX,EAAOlB,OAAOmC,eAAiBrC,KAAK+B,WAAWX,EAAOlB,OAAOoC,eAnCxF,SAqCMlB,UACKpB,KAAK+B,WAAWX,EAAOmB,aAAgBvC,KAAK4B,gBAAgBR,IAAUpB,KAAKW,OAAOS,EAAMoB,WAtCnG,SAwCIpB,UACQpB,KAAK4B,gBAAgBR,IAAU,mFAAmFjE,KAAKiE,oBAzCnI,SA2CgBA,UACLA,MAAAA,SA5CX,SA8CMA,UAEEpB,KAAK4B,gBAAgBR,KACnBpB,KAAKW,OAAOS,IAAUpB,KAAKyC,MAAMrB,IAAUpB,KAAK0C,SAAStB,MAAYA,EAAMxF,QAC5EoE,KAAKY,OAAOQ,KAAWE,OAAOqB,KAAKvB,GAAOxF,mBAlDnD,SAqDWwF,EAAOwB,UACPlB,QAAQN,GAASwB,GAAexB,aAAiBwB,mBAtD5D,SAwDexB,UACHpB,KAAK4B,gBAAgBR,GAA6B,KAApBA,EAAMwB,yBA3D1C,yBAkE8BjG,SAASkG,sBAC/B,qBAAsBlG,SAASmG,gBAAgBC,QAAU,OAAO5F,KAAK6F,UAAUC,oBAC/E,kBAAkB9F,KAAK6F,UAAUE,gBACpC,uBAAuB/F,KAAK6F,UAAUE,kBArE3C,SA2EJC,OAAKC,EAAuBC,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAR,cACf,IAAIC,QAAQ,SAACC,EAASC,WAEfC,EAAU,IAAIC,oBAGd,oBAAqBD,YAInBE,iBAAiB,OAAQ,cACR,SAAjBP,QAEY3C,KAAKC,MAAM+C,EAAQG,eAC7B,MAAOnH,KACGgH,EAAQG,qBAGZH,EAAQI,cAIhBF,iBAAiB,QAAS,iBACxB,IAAIG,MAAML,EAAQM,gBAGpBC,KAAK,MAAOb,GAAK,KAGjBC,aAAeA,IAEfa,OACV,MAAOxH,KACEA,iBA5GT,SAoHAc,OAAK2G,EAAcb,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAH,SACf,IAAIC,QAAQ,SAACC,EAASC,OACnBW,EAAQ,IAAIC,MACZC,EAAU,kBACLF,EAAM1G,cACN0G,EAAMzG,SACZyG,EAAMG,cAAgBJ,EAAWX,EAAUC,GAAQW,WAEjDI,OAAOJ,GAAQ1G,OAAQ4G,EAAS3G,QAAS2G,EAAS9G,IAAAA,kBA5HvD,SAiIC4F,UACA,IAAIG,QAAQ,SAACC,EAASC,KAClBL,WACMI,QACFC,kBArIT,SA2ICL,EAAKqB,MACPnE,EAAMC,GAAGK,OAAOwC,QAKfsB,EAAQpE,EAAMC,GAAGK,OAAO6D,GAGxBE,EAAS,kBAAM/H,SAASgI,iBAAT,IAA8BH,GAAM5I,YAgBpD6I,IAAUC,IAAU,KACfE,EAAanF,EAAQM,UAGrB8E,EAAYlI,SAASS,cAAc,YACnC0H,aAAaD,GAAW,GAE1BJ,KACUM,aAAa,KAAMP,GAI7BI,EAAY,KACNI,EAAS9E,OAAOC,aAAaC,QAjC5B,SAiC6CoE,MAC9B,OAAXQ,EAEG,KACJC,EAAOxE,KAAKC,MAAMsE,iBACX/I,KAAK4I,EAAWI,EAAKC,YAOrCC,MAAMhC,GACNiC,KAAK,SAAAvH,GACEwC,EAAMC,GAAGC,MAAM1C,KAIf+G,UACOzE,aAAaY,QApDrB,SAqDcyD,EACT/D,KAAKO,mBACQnD,OAKR5B,KAAK4I,EAAWhH,MAEhCwH,MAAM,wBAxDNC,EAAaL,GAEdR,GAASC,WAKRa,UAAYN,WAGRO,KAAKC,aAAazF,KAAMrD,SAAS6I,KAAKE,WAAW,kBAhKxD,SAmNCC,UACGA,EAAV,IAAoBC,KAAKC,MAAsB,IAAhBD,KAAKE,gBApN9B,SAwNLC,EAAUC,OAELC,EAAUF,EAASnK,OAASmK,GAAYA,SAIxCG,KAAKD,GACNE,UACAC,QAAQ,SAACC,EAASC,OACTC,EAAQD,EAAQ,EAAIN,EAAQQ,WAAU,GAAQR,EAG9CS,EAASJ,EAAQK,WACjBC,EAAUN,EAAQO,cAIlBxI,YAAYiI,GAKdM,IACOlB,aAAac,EAAOI,KAEpBvI,YAAYmI,oBAjPzB,SAuPIzI,EAAM+I,EAAYC,OAEtBT,EAAU1J,SAASS,cAAcU,UAGnCuC,EAAMC,GAAGM,OAAOiG,MACVE,cAAcV,EAASQ,GAI7BxG,EAAMC,GAAGK,OAAOmG,OACRE,UAAYF,GAIjBT,eAtQD,SA0QEA,EAASY,KACVP,WAAWjB,aAAaY,EAASY,EAAOL,4BA3QzC,SA+QI9I,EAAM2I,EAAQI,EAAYC,KAE7B1I,YAAYiC,EAAMjD,cAAcU,EAAM+I,EAAYC,mBAjRnD,SAqRIT,GACNhG,EAAMC,GAAGoC,SAAS2D,IAAYhG,EAAMC,GAAGmC,MAAM4D,SACvCH,KAAKG,GAASD,QAAQ/F,EAAM6G,eAIjC7G,EAAMC,GAAG+F,QAAQA,IAAahG,EAAMC,GAAG+F,QAAQA,EAAQK,eAIpDA,WAAWS,YAAYd,iBA/RzB,SAmSGA,WACHzK,EAAWyK,EAAQX,WAAnB9J,OAECA,EAAS,KACJuL,YAAYd,EAAQe,cAClB,kBAxSR,SA6SKC,EAAUC,UAChBjH,EAAMC,GAAG+F,QAAQiB,IAAcjH,EAAMC,GAAG+F,QAAQiB,EAASZ,aAAgBrG,EAAMC,GAAG+F,QAAQgB,MAItFX,WAAWa,aAAaF,EAAUC,GAEpCD,GALI,oBA/SL,SAwTIhB,EAASQ,GACdxG,EAAMC,GAAG+F,QAAQA,KAAYhG,EAAMC,GAAGC,MAAMsG,WAI1CW,QAAQX,GAAYT,QAAQ,SAAAqB,gBAC/B3H,EAEE4H,EAAA,GADFC,EACED,EAAA,KACM3C,aAAajF,EAAK6H,gCAjUxB,SAsUgBC,EAAKC,OAMtBxH,EAAMC,GAAGK,OAAOiH,IAAQvH,EAAMC,GAAGC,MAAMqH,gBAItCf,KACAiB,EAAWD,WAEbE,MAAM,KAAK3B,QAAQ,SAAA4B,OAEbC,EAAWD,EAAEvJ,OACbyJ,EAAYD,EAAS/K,QAAQ,IAAK,IAIlCiL,EAHWF,EAAS/K,QAAQ,SAAU,IAGrB6K,MAAM,KACvBjI,EAAMqI,EAAM,GACZR,EAAQQ,EAAMvM,OAAS,EAAIuM,EAAM,GAAGjL,QAAQ,QAAS,IAAM,UAGnD+K,EAASG,OAAO,QAGrB,IAEG/H,EAAMC,GAAGM,OAAOkH,IAAazH,EAAMC,GAAGK,OAAOmH,EAASO,WAC7CA,OAAT,IAAsBH,KAGfG,MAAQH,YAGlB,MAEU1D,GAAKyD,EAAS/K,QAAQ,IAAK,cAGrC,MAEU4C,GAAO6H,KASvBd,gBA3XD,SA+XGR,EAASiC,MACbjI,EAAMC,GAAG+F,QAAQA,QAIlBkC,EAAOD,EAENjI,EAAMC,GAAGkI,QAAQD,QACVlC,EAAQoC,aAAa,WAG7BF,IACQxD,aAAa,SAAU,MAEvB2D,gBAAgB,wBA7YtB,SAkZErC,EAAS6B,EAAWS,MACxBtI,EAAMC,GAAG+F,QAAQA,GAAU,KACvBuC,EAAS,qBACQ,IAAVD,MACEA,EAAQ,MAAQ,YAGrBE,UAAUD,GAAQV,GACnB7B,EAAQwC,UAAUC,SAASZ,UAG/B,eA7ZD,SAiaD7B,EAAS6B,UACP7H,EAAMC,GAAG+F,QAAQA,IAAYA,EAAQwC,UAAUC,SAASZ,YAlazD,SAsaF7B,EAAS4B,OACPc,GAAc7G,QAAAA,aAMd8G,EAAUD,EAAUC,SAAWD,EAAUE,uBAAyBF,EAAUG,oBAAsBH,EAAUI,qCAHvGtH,MAAMqE,KAAKvJ,SAASgI,iBAAiBsD,IAAWmB,SAASpJ,cAK7DgJ,EAAQ/M,KAAKoK,EAAS4B,gBA/avB,SAmbEA,UACDjI,KAAK+F,SAASlB,UAAUF,iBAAiBsD,eApb1C,SAwbCA,UACAjI,KAAK+F,SAASlB,UAAUwE,cAAcpB,oBAzbvC,eA8bFqB,EAAU3M,SAAS4M,uBAElBD,GAAWA,IAAY3M,SAAS6I,KAGvB7I,SAAS0M,cAAc,UAFvB,gBAjcR,eA0cAhD,EAAgChD,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAtB,KAAMmG,EAAgBnG,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,MACjChD,EAAMC,GAAG+F,QAAQA,QAIhBoD,EAAYpJ,EAAMqJ,YAAYzN,KAAK+D,KAAM,2DACzC2J,EAAQF,EAAU,GAClBG,EAAOH,EAAUA,EAAU7N,OAAS,GAEpCiO,EAAO,SAAAC,MAES,QAAdA,EAAMhK,KAAmC,IAAlBgK,EAAMC,aAK3BT,EAAUjJ,EAAM2J,kBAElBV,IAAYM,GAASE,EAAMG,SAIpBX,IAAYK,GAASG,EAAMG,aAE7BC,UACCC,qBALAD,UACAC,oBAQVX,IACMY,GAAGpK,KAAK+F,SAASlB,UAAW,UAAWgF,GAAM,KAE7CQ,IAAIrK,KAAK+F,SAASlB,UAAW,UAAWgF,GAAM,oBA1elD,SA+eK9D,EAAU+D,EAAOQ,OAAUd,EAAiDnG,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,GAAjCkH,IAAiClH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,KAAAA,UAAA,GAAjBmH,EAAiBnH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,OAEnFhD,EAAMC,GAAGC,MAAMwF,KAAa1F,EAAMC,GAAGC,MAAMuJ,IAAWzJ,EAAMC,GAAGmK,SAASH,MAKxEjK,EAAMC,GAAGoC,SAASqD,IAAa1F,EAAMC,GAAGmC,MAAMsD,SAExCG,KAAKH,GAAUK,QAAQ,SAAAC,GACrBA,aAAmBqE,QACbC,eAAe1O,KAAK,KAAMoK,EAASyD,EAAOQ,EAAUd,EAAQe,EAASC,cAQjFI,EAASd,EAAM/B,MAAM,KAIvB8C,EAAUL,EAGVM,EAAQC,8CAUL3E,QAAQ,SAAAtI,KACF0L,EAAS,mBAAqB,uBAAuB1L,EAAMwM,EAAUO,UAphB5E,SAyhBPxE,OAASuE,EAAwDvH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAA/C,GAAIiH,EAA2CjH,UAAA,GAAjCkH,IAAiClH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,KAAAA,UAAA,GAAjBmH,EAAiBnH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,KAC1DsH,eAAetE,EAASuE,EAAQN,GAAU,EAAMC,EAASC,QA1hBzD,SA8hBNnE,OAASuE,EAAwDvH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAA/C,GAAIiH,EAA2CjH,UAAA,GAAjCkH,IAAiClH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,KAAAA,UAAA,GAAjBmH,EAAiBnH,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,KAC3DsH,eAAetE,EAASuE,EAAQN,GAAU,EAAOC,EAASC,kBA/hB1D,SAmiBInE,OAASvI,EAAyCuF,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAlC,GAAI2H,EAA8B3H,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,GAAb4H,EAAa5H,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,SAEvDhD,EAAMC,GAAG+F,QAAQA,KAAYhG,EAAMC,GAAGC,MAAMzC,QAK3CgM,EAAQ,IAAIoB,YAAYpN,oBAElBwD,OAAOiD,UAAW0G,QAChBjL,WAKNmL,cAAcrB,iBAljBhB,SAujBEzD,EAASjF,MAEbf,EAAMC,GAAGmC,MAAM4D,IAAYhG,EAAMC,GAAGoC,SAAS2D,SACvCH,KAAKG,GAASD,QAAQ,SAAAa,UAAU5G,EAAM+K,YAAYnE,EAAQ7F,aAK/Df,EAAMC,GAAG+F,QAAQA,QAKhBgF,EAAmD,SAAzChF,EAAQiF,aAAa,gBAC/BC,EAAQlL,EAAMC,GAAGkI,QAAQpH,GAASA,GAASiK,IAGzCtG,aAAa,eAAgBwG,YAxkB/B,SA4kBHnK,8BAAUrF,EAAM8F,MAAA2J,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,MAAAA,EAAA,GAAApI,UAAAoI,UACfpL,EAAMC,GAAGC,MAAMa,GACRA,EAGJA,EAAMsK,WAAWxO,QAAQ,WAAY,SAACyO,EAAOhN,UAAO0B,EAAMC,GAAGK,OAAO5E,EAAK4C,IAAM5C,EAAK4C,GAAK,oBAjlB1F,SAqlBIiN,EAASC,UACH,IAAZD,GAAyB,IAARC,GAAatK,OAAOC,MAAMoK,IAAYrK,OAAOC,MAAMqK,GAC7D,GAGHD,EAAUC,EAAM,KAAKC,QAAQ,aA1lB/B,SA8lBDnE,UACEoE,SAAUpE,EAAQ,GAAK,GAAM,GAAI,gBA/lBlC,SAimBCA,UACAoE,SAAUpE,EAAQ,GAAM,GAAI,gBAlmB7B,SAomBCA,UACAoE,SAASpE,EAAQ,GAAI,gBArmBtB,eAymBCqE,EAAkD3I,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAA3C,EAAG4I,EAAwC5I,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,GAAlB6I,EAAkB7I,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,OAEpDhD,EAAMC,GAAG6L,OAAOH,UACVhM,KAAKoM,WAAW,KAAMH,EAAcC,OAIzCG,EAAS,SAAA1E,UAAS,IAAIA,GAAQ2E,OAAO,IAGvCC,EAAQvM,KAAKwM,SAASR,GACpBS,EAAOzM,KAAK0M,WAAWV,GACvBW,EAAO3M,KAAK4M,WAAWZ,UAGzBC,GAAgBM,EAAQ,KACxB,MAEQ,IAIFL,EAAW,IAAM,IAAKK,EAAQF,EAAOI,GAA/C,IAAwDJ,EAAOM,eA/nBzD,eAmoBCvL,EAAqCiC,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAA7B,GAAIwJ,EAAyBxJ,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAlB,GAAInG,EAAcmG,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAJ,UACjCjC,EAAMlE,QAAQ,IAAI4P,OAAOD,EAAKnB,WAAWxO,QAAQ,4BAA6B,QAAS,KAAMA,EAAQwO,yBApoBtG,kBAwoBcrI,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAJ,IACHqI,WAAWxO,QAAQ,SAAU,SAAA4J,UAAQA,EAAKsB,OAAO,GAAG2E,cAAgBjG,EAAKkG,OAAO,GAAGC,8BAzoB1F,eA8oBFtM,GADiB0C,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAJ,IACEqI,oBAGVrL,EAAM6M,WAAWvM,EAAQ,IAAK,OAG9BN,EAAM6M,WAAWvM,EAAQ,IAAK,OAG9BN,EAAM8M,YAAYxM,GAGpBN,EAAM6M,WAAWvM,EAAQ,IAAK,iBA1pB/B,eA+pBFA,GADgB0C,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAJ,IACGqI,oBAGVrL,EAAM+M,aAAazM,IAGdyH,OAAO,GAAG6E,cAAgBtM,EAAO2L,MAAM,WArqB/C,mBAyqBHrF,EAAyB5D,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,yBAATgK,EAASxL,MAAAyL,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,MAAAA,EAAA,GAAAlK,UAAAkK,OACvBF,EAAQzR,cACFqL,MAGLuG,EAASH,EAAQI,eAElBpN,EAAMC,GAAGM,OAAO4M,WAId7K,KAAK6K,GAAQpH,QAAQ,SAAAtG,GACpBO,EAAMC,GAAGM,OAAO4M,EAAO1N,KAClBwB,OAAOqB,KAAKsE,GAAQmC,SAAStJ,WACvByE,OAAO0C,EAAdyG,KAAyB5N,SAGvBgB,OAAOmG,EAAOnH,GAAM0N,EAAO1N,YAE1ByE,OAAO0C,EAAdyG,KAAyB5N,EAAM0N,EAAO1N,OAIvCO,EAAMS,OAAN6M,MAAAtN,GAAa4G,GAAb2G,6HAAAC,CAAwBR,MAfpBpG,UAjrBL,SAosBHxE,UACEpC,EAAMC,GAAGmC,MAAMA,GAIbA,EAAMqL,OAAO,SAACC,EAAMzH,UAAU7D,EAAMuL,QAAQD,KAAUzH,IAHlD7D,aAtsBL,SA6sBA7B,UACCH,KAAKC,MAAMD,KAAKO,UAAUJ,aA9sB3B,SAktBF6B,EAAOkF,UACNtH,EAAMC,GAAGmC,MAAMA,IAAWA,EAAM7G,OAI9B6G,EAAMwL,OAAO,SAACC,EAAMC,UAAUvI,KAAKwI,IAAID,EAAOxG,GAAS/B,KAAKwI,IAAIF,EAAOvG,GAASwG,EAAOD,IAHnF,uBAptBL,SA2tBO/K,SAET,wDAAwDhG,KAAKgG,GACtDjC,EAAUmN,QAIjB,wDAAwDlR,KAAKgG,GACtDjC,EAAUoN,MAGd,qBAtuBD,SA0uBKnL,MACP9C,EAAMC,GAAGC,MAAM4C,UACR,YAIJA,EAAIwI,MADG,gEACYmB,OAAOyB,GAAKpL,gBAhvBhC,SAovBGA,MACL9C,EAAMC,GAAGC,MAAM4C,UACR,QAGP9C,EAAMC,GAAG6L,OAAO5K,OAAO4B,WAChBA,SAIJA,EAAIwI,MADG,mCACYmB,OAAOyB,GAAKpL,YA9vBhC,SAkwBDA,OACCqL,EAAS7R,SAASS,cAAc,cAC/BE,KAAO6F,EACPqL,gBArwBD,SAywBGpN,OACLqN,EAASrN,GAGTA,EAAMsN,WAAW,YAActN,EAAMsN,WAAW,iBAClC1O,KAAK2O,SAASvN,GAAzBqN,eAGHzO,KAAKM,GAAGC,MAAMkO,GACP,KAGIA,EAAOnC,MAAMmC,EAAOT,QAAQ,KAAO,GAAGjG,MAAM,KAE7CkG,OAAO,SAACW,EAAQC,SAItBA,EAAK9G,MAAM,cAFXjI,EAF+BgP,EAAA,GAG/BC,EAH+BD,EAAA,UAM5BxN,OAAOiD,OAAOqK,EAAdlB,KAAyB5N,EAAMkP,mBAAmBD,0BA7xBvD,SAkyBK3N,UACNf,EAAMC,GAAGM,OAAOQ,GAIdE,OAAOqB,KAAKvB,GACd6N,IAAI,SAAAnP,UAAUoP,mBAAmBpP,GAA7B,IAAqCoP,mBAAmB9N,EAAMtB,MAClEqP,KAAK,KALC,cApyBL,SA6yBA3B,OACA4B,EAAWzS,SAAS0S,yBACpBhJ,EAAU1J,SAASS,cAAc,gBAC9BgB,YAAYiI,KACbd,UAAYiI,EACb4B,EAASE,WAAWtI,0BAlzBrB,SAszBKuI,EAAOC,OAEZC,EADW,SAAXC,EAAYC,EAAGC,UAAa,IAANA,EAAUD,EAAID,EAASE,EAAGD,EAAIC,GAC5CF,CAASH,EAAOC,UACpBD,EAAQE,EAAlB,IAA2BD,EAASC,gCAK9BpJ,EAAU1J,SAASS,cAAc,QAEjCwN,oBACgB,oCACH,4BACF,2CACD,iBAGV9M,EAAOwD,OAAOqB,KAAKiI,GAAQiC,KAAK,SAAA/C,eAAkCtM,IAAzB6I,EAAQtD,MAAM+G,aAEtDzJ,EAAMC,GAAGK,OAAO7C,IAAQ8M,EAAO9M,YAz0BhC,SA60BFuI,cACO,aACDvB,aAAauB,GAAS,KACpBwJ,eACF/K,aAAauB,GAAS,IAC7B,KJp1BLyE,SAEK,gBAAiBnO,SAASS,cAAc,eACxC,gBAAiBT,SAASS,cAAc,eAHnC,SAONU,EAAMgS,EAAUC,OACdC,GAAM,EACNC,GAAK,EACHC,EAAU7P,EAAM8P,aAChBC,EAAgBF,EAAQG,UAAYN,GAAejF,EAAQiF,mBAEtDD,EAAX,IAAuBhS,OACd,mBACKgN,EAAQwF,QACFxF,EAAQyF,cAAgBL,EAAQG,UAAYD,aAGvD,mBACKtF,EAAQ0F,QACF1F,EAAQyF,qBAGnB,oBACA,iBACK,IACDzF,EAAQyF,cAAgBL,EAAQG,UAAYD,sBAI3CtF,EAAQ0F,OAAS1F,EAAQwF,QACnBxF,EAAQyF,oCAYZlQ,EAAM8P,aACNE,UAAYhQ,EAAMC,GAAGmK,SAASpK,EAAMjD,cAAc,SAASqT,mCAKtEpQ,EAAMC,GAAGmK,SAASvK,OAAOwQ,mDAIrB,gBAAiB/T,SAASS,cAAc,cAtDzC,SA2DPU,OACO6S,EAAU3Q,KAAV2Q,cAIC3Q,KAAK4Q,UAAYvQ,EAAMC,GAAGmK,SAASkG,EAAME,oBACnC,KAIP/S,EAAKsL,SAAS,kBACPuH,EAAME,YAAY/S,GAAMZ,QAAQ,KAAM,OAI7C8C,KAAK8Q,eACGhT,OACC,oBACM6S,EAAME,YAAY,oCAAoC3T,QAAQ,KAAM,QAE1E,mBACMyT,EAAME,YAAY,8CAA8C3T,QAAQ,KAAM,QAEpF,mBACMyT,EAAME,YAAY,8BAA8B3T,QAAQ,KAAM,mBAG9D,OAEZ,GAAI8C,KAAK+Q,eACJjT,OACC,oBACM6S,EAAME,YAAY,eAAe3T,QAAQ,KAAM,QAErD,mBACMyT,EAAME,YAAY,8BAA8B3T,QAAQ,KAAM,QAEpE,mBACMyT,EAAME,YAAY,yBAAyB3T,QAAQ,KAAM,mBAGzD,GAGrB,MAAOT,UACE,SAIJ,cAIC,eAAgBE,SAASS,cAAc,0BAKhC,eAEX2C,GAAY,UAEN8K,EAAUvJ,OAAOoM,kBAAmB,eAAW,qBAEjC,EACL,eAGR/J,iBAAiB,OAAQ,KAAMkH,UAC/BmG,oBAAoB,OAAQ,KAAMnG,GAC3C,MAAOpO,WAIFsD,EAhBQ,eAqBT7E,EAAQyB,SAASS,cAAc,WAC/BU,KAAO,QACS,UAAf5C,EAAM4C,YAKV,iBAAkBnB,SAASmG,6BAGQ,IAA7BzC,EAAM4Q,iCAIJ,eAAgB/Q,QAAUA,OAAOgR,WAAW,4BAA4BlI,SKxJrFmI,cAAQ,kBAEDnR,KAAK4Q,QAIH5Q,KAAK2Q,MAAMhM,iBAAiB,UAHxB,wBAHL,eAWD3E,KAAK4Q,eACC,SAILvD,EAAU8D,EAAMC,WAAWnV,KAAK+D,SAElCK,EAAMC,GAAGC,MAAM8M,UACR,SAILgE,EAAQxP,MAAMqE,KAAKmH,GAASS,OAAO,SAAAN,UAAWnN,EAAMC,GAAGC,MAAMiN,EAAOlC,aAAa,kBAGnFjL,EAAMC,GAAGC,MAAM8Q,GACR,KAIJhR,EAAMiR,OAAOD,EAAMpC,IAAI,SAAAzB,UAAUjM,OAAOiM,EAAOlC,aAAa,oBA/B7D,cAmCDtL,KAAK4Q,aAIJlR,EAASM,YAGR0N,eAAehO,EAAOiR,MAAO,eAAW,eAGjCtD,EAAU8D,EAAMC,WAAWnV,KAAKyD,MAElCW,EAAMC,GAAGC,MAAM8M,UACR,SAGLrE,EAAUnH,MAAMqE,KAAKmH,GAASS,OAAO,SAAAN,UAAUA,EAAOlC,aAAa,SAAW5L,EAAO8N,gBAEvFnN,EAAMC,GAAGC,MAAMyI,GACR,KAGJzH,OAAOyH,EAAQ,GAAGsC,aAAa,cAfC,SAiBvClK,OAEMiM,EAAU8D,EAAMC,WAAWnV,KAAKyD,OAElCW,EAAMC,GAAGC,MAAM8M,QAKbrE,EAAUnH,MAAMqE,KAAKmH,GAASS,OAAO,SAAAN,UAAUjM,OAAOiM,EAAOlC,aAAa,WAAalK,QAGzFf,EAAMC,GAAGC,MAAMyI,QAKbjJ,EAAYiJ,EAAQ8E,OAAO,SAAAN,UAAU1C,EAAQyG,KAAKtV,KAAKyD,EAAQ8N,EAAOlC,aAAa,eAGrFjL,EAAMC,GAAGC,MAAMR,MAKboL,cAAclP,KAAKyD,EAAQA,EAAOiR,MAAO,oBAAoB,WACtDvP,QAILoQ,EAAyB9R,EAAzB8R,YAAaC,EAAY/R,EAAZ+R,UAGdd,MAAMpT,IAAMwC,EAAU,GAAGuL,aAAa,SAGtCqF,MAAMe,OAGTD,KACOE,SAIJH,YAAcA,IAGfrG,cAAclP,KAAKyD,EAAQA,EAAOiR,MAAO,iBAAiB,WACnDvP,2BA3Gf,WAoHDpB,KAAK4Q,YAKJ1J,cAAciK,EAAMC,mBAKrBT,MAAM5L,aAAa,MAAO/E,KAAKJ,OAAOgS,iBAKtCjB,MAAMe,YAGNG,MAAMC,IAAI,iCCvIjBC,EAAO,eACLjS,EAAuBuD,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAjB,GAAIzD,EAAayD,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,SACnBhD,EAAMC,GAAGC,MAAMT,IAAQO,EAAMC,GAAGC,MAAMX,KAAY0B,OAAOqB,KAAK/C,EAAOmS,MAAM3I,SAAStJ,SAC7E,OAGPa,EAASf,EAAOmS,KAAKjS,GAEnB5C,gBACY0C,EAAOoS,mBACVpS,EAAOqS,qBAGfzK,QAAQtK,GAASkJ,QAAQ,SAAAqB,gBAC5B3H,EAEE4H,EAAA,GADFC,EACED,EAAA,KACOrH,EAAM6M,WAAWvM,EAAQb,EAAK6H,KAGpChH,GCfTuP,EAAU7P,EAAM8P,aAEhB+B,cAAW,eAMHC,EADM,IAAIC,IAAIpS,KAAKJ,OAAOyS,QAASnS,OAAOoS,UAC/BC,OAASrS,OAAOoS,SAASC,MAASrC,EAAQsC,OAAStS,OAAOuS,yBAGlEzS,KAAKJ,OAAOyS,8BATZ,2BAkBAtM,SAASmM,SAAW7R,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUT,SAASlM,cAG/ED,SAAS6M,cACJvS,EAAMqJ,YAAYzN,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQjB,YAC1DtR,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQC,eACxDxS,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQE,gBAC3DzS,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQG,oBACrD1S,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQI,kBACjE3S,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQK,UAC3D5S,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQM,aACtD7S,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQO,kBACzD9S,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQQ,mBAC1D/S,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQS,qBACxDhT,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUC,QAAQU,kBAIrEvN,SAASwN,SAAWlT,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUY,eAGtExN,SAASyN,aACJnT,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUa,OAAOC,aACvDpT,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUa,OAAOE,cAIhE3N,SAAS4N,gBACFtT,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUgB,QAAQC,oBACrDvT,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUgB,QAAQnC,sBAC7DnR,EAAMqS,WAAWzW,KAAK+D,KAAMA,KAAKJ,OAAO+S,UAAUgB,QAAQE,WAIpExT,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASwN,iBAC1BxN,SAAS4N,QAAQG,YAAc9T,KAAK+F,SAASwN,SAASlK,cAAvB,IAAyCrJ,KAAKJ,OAAOmU,WAAWC,WAGjG,EACT,MAAO7X,eAEA0V,MAAMoC,KAAK,kEAAmE9X,QAG9E+X,sBAAqB,IAEnB,eAhEF,SAqEFpW,EAAM+I,OAEPwL,EAAUH,EAASiC,WAAWlY,KAAK+D,MACnCoU,GAAe/B,EAAQF,KAAqB,GAAdE,EAAQlP,KAAtC,IAAkDnD,KAAKJ,OAAOyU,WAG9DC,EAAO3X,SAAS4X,gBALJ,6BAK+B,SAC3CxN,cACFuN,EACAjU,EAAMS,OAAO+F,QACH,yBACK,eAKb2N,EAAM7X,SAAS4X,gBAfH,6BAe8B,OAC1ClY,EAAU+X,EAAV,IAAsBtW,QAKxB,SAAU0W,IACNC,eAAe,+BAAgC,OAAQpY,KAEvDoY,eAAe,+BAAgC,aAAcpY,KAIhE+B,YAAYoW,GAEVF,eApGE,SAwGDxW,EAAM4W,OACV5N,EAAOiL,EAASjU,EAAMkC,KAAKJ,QACzBiH,EAAavF,OAAOiD,UAAWmQ,UAE7B5W,OACC,QACM,gBAGN,YACM,gBAOX,UAAW+I,IACAwB,OAAX,IAAwBrI,KAAKJ,OAAOmU,WAAWzL,SAEpCD,MAAQrI,KAAKJ,OAAOmU,WAAWzL,OAGvCjI,EAAMjD,cAAc,OAAQyJ,EAAYC,gBA/HtC,SAmIDA,MACJzG,EAAMC,GAAGC,MAAMuG,UACR,SAGL6N,EAAQtU,EAAMjD,cAAc,cACvB4C,KAAKJ,OAAOmU,WAAWa,KAAKjN,iBAGjCvJ,YACFiC,EAAMjD,cACF,cAEW4C,KAAKJ,OAAOmU,WAAWa,KAAKD,OAEvC7N,IAID6N,gBAtJE,SA0JAE,EAAYH,OACfI,EAASzU,EAAMjD,cAAc,UAC7ByJ,EAAavF,OAAOiD,UAAWmQ,GACjC5W,EAAOuC,EAAM0U,YAAYF,GAEzBrL,GAAS,EACTwL,OAAAA,EACAV,OAAAA,EACAW,OAAAA,EACAC,OAAAA,SAEE,SAAUrO,MACD/I,KAAO,UAGlB,UAAW+I,EACPA,EAAWwB,MAAMe,SAASpJ,KAAKJ,OAAOmU,WAAWoB,aACtC9M,OAAX,IAAwBrI,KAAKJ,OAAOmU,WAAWoB,WAGxC9M,MAAQrI,KAAKJ,OAAOmU,WAAWoB,QAItCN,OACC,UACQ,IACD,SACO,UACR,SACO,kBAGb,UACQ,IACD,SACO,WACR,WACO,kBAGb,cACQ,IACD,mBACO,oBACR,iBACO,wBAGb,gBACQ,IACD,oBACO,mBACR,qBACO,4BAGb,eACUxM,OAAX,IAAwBrI,KAAKJ,OAAOmU,WAAWoB,QAA/C,eACO,SACC,SACD,uBAICrX,IACD+W,SAIXrL,KAEOpL,YAAY8T,EAASkD,WAAWnZ,KAAK+D,KAAMkV,GAAe7M,MAAO,qBACjEjK,YAAY8T,EAASkD,WAAWnZ,KAAK+D,KAAMsU,GAAQjM,MAAO,yBAG1DjK,YAAY8T,EAASmD,YAAYpZ,KAAK+D,KAAMiV,GAAgB5M,MAAO,sBACnEjK,YAAY8T,EAASmD,YAAYpZ,KAAK+D,KAAMgV,GAAS3M,MAAO,0BAGxD,iBAAkB,MAEtBjK,YAAY8T,EAASkD,WAAWnZ,KAAK+D,KAAMsU,MAC3ClW,YAAY8T,EAASmD,YAAYpZ,KAAK+D,KAAMgV,OAIjDlU,OAAO+F,EAAYxG,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUC,QAAQ9U,GAAO+I,MAExFE,cAAc+N,EAAQjO,GAGf,SAAT/I,GACKuC,EAAMC,GAAGmC,MAAMzC,KAAK+F,SAAS6M,QAAQ9U,WACjCiI,SAAS6M,QAAQ9U,YAGrBiI,SAAS6M,QAAQ9U,GAAMe,KAAKiW,SAE5B/O,SAAS6M,QAAQ9U,GAAQgX,EAG3BA,eAhQE,SAoQDhX,EAAM+I,OAERmO,EAAQ3U,EAAMjD,cAChB,aAESyJ,EAAWrC,MACTqC,EAAWrC,GAAlB,eACOxE,KAAKJ,OAAOmU,WAAWzL,QAElCyJ,EAASjU,EAAMkC,KAAKJ,SAIlBwB,EAAQf,EAAMjD,cAChB,QACAiD,EAAMS,OACFT,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUa,OAAO1V,UAEnD,YACD,MACA,SACC,UACC,eACO,WAER,2BACgB+I,EAAWrC,GAAjC,yBACiB,kBACA,oBACA,GAErBqC,gBAIHd,SAASyN,OAAO1V,GAAQsD,IAGpBmU,gBAAgBtZ,KAAK+D,KAAMoB,qCA1S3B,SAmTEtD,EAAM+I,OACX0M,EAAWlT,EAAMjD,cACnB,WACAiD,EAAMS,OACFT,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUgB,QAAQ7V,SAErD,MACA,UACE,OACD,8BACS,GAEnB+I,OAKK,WAAT/I,EAAmB,GACVM,YAAYiC,EAAMjD,cAAc,OAAQ,KAAM,UAEnDoY,EAAS,UACL1X,OACC,WACQiU,EAAS,SAAU/R,KAAKJ,kBAGhC,WACQmS,EAAS,WAAY/R,KAAKJ,UAOlCoH,UAAT,KAA0BwO,EAAOvI,0BAGhClH,SAAS4N,QAAQ7V,GAAQyV,EAEvBA,cA1VE,SA8VFzV,OACD+I,EAAaxG,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUgB,QAAQ7V,IAE3E+G,EAAYxE,EAAMjD,cAAc,MAAOiD,EAAMS,OAAO+F,uBACjCA,EAAWwB,mBAClB0J,EAASjU,EAAMkC,KAAKJ,UAClC,qBAGCmG,SAAS4N,QAAQ7V,GAAQ+G,EAEvBA,kBAzWE,SA6WE8C,EAAO8N,EAAM3X,EAAMmU,OAAO0C,EAA+BtR,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAvB,KAAMqS,EAAiBrS,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,GAC9D0K,EAAO1N,EAAMjD,cAAc,MAE3B4X,EAAQ3U,EAAMjD,cAAc,eACvB4C,KAAKJ,OAAOmU,WAAWoB,UAG5BQ,EAAQtV,EAAMjD,cAChB,QACAiD,EAAMS,OAAOT,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUa,OAAO1V,UAChE,qBACQA,0BAGP,mBAIT8X,EAAOvV,EAAMjD,cAAc,QAAUkL,OAAQ,OAE7ClK,YAAYuX,KACZvX,YAAYwX,KACZC,mBAAmB,YAAa5D,GAElC5R,EAAMC,GAAG+F,QAAQsO,MACXvW,YAAYuW,KAGjBvW,YAAY4W,KACZ5W,YAAY2P,sBA1YR,eA8YK9G,EAA2C5D,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAlC,KAAM2I,EAA4B3I,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAArB,EAAG6I,EAAkB7I,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,MAEpDhD,EAAMC,GAAG+F,QAAQY,IAAY5G,EAAMC,GAAG6L,OAAOH,QAK5C8J,EAAazV,EAAMmM,SAASxM,KAAK6T,UAAY,IAG5C7M,UAAY3G,EAAM+L,WAAWJ,EAAM8J,EAAY5J,kBAxZ7C,WA6ZJlM,KAAKD,UAAUkQ,KAKhB5P,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASyN,OAAOE,WAC7BqC,SAAS9Z,KAAK+D,KAAMA,KAAK+F,SAASyN,OAAOE,OAAQ1T,KAAKgW,MAAQ,EAAIhW,KAAK0T,QAIhFrT,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAAS6M,QAAQK,SACjC7H,YAAYpL,KAAK+F,SAAS6M,QAAQK,KAAMjT,KAAKgW,OAAyB,IAAhBhW,KAAK0T,mBAxa5D,SA6aJzM,OAAQU,EAAWtE,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAH,EAChBhD,EAAMC,GAAG+F,QAAQY,OAKfU,MAAQA,IAGN4N,gBAAgBtZ,KAAK+D,KAAMiH,oBAtb3B,SA0bE6C,iBACN9J,KAAKD,UAAUkQ,IAAO5P,EAAMC,GAAGwJ,MAAMA,QAItCnC,EAAQ,KAkBRmC,SACQA,EAAMhM,UAEL,iBACA,cACA,WACOuC,EAAM4V,cAAcjW,KAAKwR,YAAaxR,KAAK6T,UAGhC,eAAf/J,EAAMhM,QACGiY,SAAS9Z,KAAK+D,KAAMA,KAAK+F,SAASyN,OAAOC,KAAM9L,aAM3D,cACA,YAjCO,SAACV,EAAQ7F,OACnBuG,EAAQtH,EAAMC,GAAG6L,OAAO/K,GAASA,EAAQ,EACzCmS,EAAWlT,EAAMC,GAAG+F,QAAQY,GAAUA,EAASiP,EAAKnQ,SAAS4N,QAAQC,UAGvEvT,EAAMC,GAAG+F,QAAQkN,GAAW,GACnB5L,MAAQA,MAGXqN,EAAQzB,EAAS4C,qBAAqB,QAAQ,GAChD9V,EAAMC,GAAG+F,QAAQ2O,OACXtP,WAAW,GAAG0Q,UAAYzO,KAuBpB3H,KAAK+F,SAAS4N,QAAQC,OAAwB,IAAhB5T,KAAKqW,6BAnelD,SA8eGpP,OAEN/L,EAAQmF,EAAMC,GAAGwJ,MAAM7C,GAAUA,EAAOA,OAASA,EAGlD5G,EAAMC,GAAG+F,QAAQnL,IAAyC,UAA/BA,EAAMoQ,aAAa,YAK7CvG,aAAa,gBAAiB7J,EAAMyM,OAGrCuI,EAAQoG,YAKPvT,MAAMwT,YAAY,UAAcrb,EAAMyM,MAAQzM,EAAM2Q,IAAM,IAAhE,yBAhgBS,SAogBK/B,iBAGT9J,KAAKJ,OAAO4W,SAAS/C,MACrBpT,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASyN,OAAOC,OACtCpT,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAAS4N,QAAQG,cACtB,IAAlB9T,KAAK6T,cAML4C,EAAU,EACRC,EAAa1W,KAAK+F,SAASwN,SAASoD,wBACpCC,EAAa5W,KAAKJ,OAAOmU,WAAWC,QAApC,YAEAxK,EAAS,SAAAqN,KACLC,YAAYC,EAAKhR,SAAS4N,QAAQG,YAAa8C,EAASpN,OAI9DxJ,KAAKgX,SACE,WAKP3W,EAAMC,GAAGwJ,MAAMA,KACL,IAAM4M,EAAWnH,OAASzF,EAAMmN,MAAQP,EAAWQ,UAC1D,CAAA,IAAI7W,EAAM8W,SAASnX,KAAK+F,SAAS4N,QAAQG,YAAa8C,YAC/CQ,WAAWpX,KAAK+F,SAAS4N,QAAQG,YAAY/Q,MAAMmU,KAAM,IAMnET,EAAU,IACA,EACHA,EAAU,QACP,OAILY,kBAAkBpb,KAAK+D,KAAMA,KAAK+F,SAAS4N,QAAQG,YAAa9T,KAAK6T,SAAW,IAAM4C,QAG1F1Q,SAAS4N,QAAQG,YAAY/Q,MAAMmU,KAAUT,EAAlD,IAIIpW,EAAMC,GAAGwJ,MAAMA,KACf,aACA,cACFV,SAASU,EAAMhM,SACS,eAAfgM,EAAMhM,oBA1jBR,SA+jBFgM,OAEDwN,GAAUjX,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAAS4N,QAAQE,WAAa7T,KAAKJ,OAAO2X,aAGvEF,kBAAkBpb,KAAK+D,KAAMA,KAAK+F,SAAS4N,QAAQnC,YAAa8F,EAAStX,KAAK6T,SAAW7T,KAAKwR,YAAcxR,KAAKwR,YAAa8F,GAGnIxN,GAAwB,eAAfA,EAAMhM,MAAyBkC,KAAK2Q,MAAM6G,WAK9CC,eAAexb,KAAK+D,KAAM8J,mBA5kB1B,cAklBJ9J,KAAKD,UAAUkQ,KAAQjQ,KAAKJ,OAAO2X,aAAcvX,KAAKwR,kBAKrDkG,EAAcrX,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAAS4N,QAAQE,WAGtD6D,GAAe1X,KAAKJ,OAAO+X,iBAAmB3X,KAAK4X,UAC3CP,kBAAkBpb,KAAK+D,KAAMA,KAAK+F,SAAS4N,QAAQnC,YAAaxR,KAAK6T,UAI9E6D,KACSL,kBAAkBpb,KAAK+D,KAAMA,KAAK+F,SAAS4N,QAAQE,SAAU7T,KAAK6T,YAItEgE,kBAAkB5b,KAAK+D,kBApmBvB,SAwmBH8X,EAAStO,KACT1E,aAAa9E,KAAK+F,SAASqN,SAAS2E,KAAKD,IAAWtO,mBAzmBjD,SA8mBEqB,iBAENxK,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASqN,SAAS4E,MAAMC,cAK7CxC,EAAOzV,KAAK+F,SAASqN,SAAS4E,MAAMC,QAAQ5O,cAAc,MAG5DhJ,EAAMC,GAAGmC,MAAMoI,UACVA,QAAQoN,QAAUpN,EAAQiD,OAAO,SAAAmK,UAAWC,EAAKtY,OAAOqY,QAAQpN,QAAQzB,SAAS6O,UAIpFzO,GAAUnJ,EAAMC,GAAGC,MAAMP,KAAK6K,QAAQoN,UAAYjY,KAAK6K,QAAQoN,QAAQrc,OAAS,OAC7Euc,UAAUlc,KAAK+D,KAVX,UAUuBwJ,KAG3B4O,UAAUnc,KAAK+D,MAGnBwJ,KAKC6O,aAAa5C,QAkCd5K,QAAQoN,QACRK,KAAK,SAACC,EAAGC,OACAC,EAAUP,EAAKtY,OAAOqY,QAAQpN,eAC7B4N,EAAQzK,QAAQuK,GAAKE,EAAQzK,QAAQwK,GAAK,GAAK,IAEzDpS,QAAQ,SAAA6R,OACCjD,EAAQ9C,EAASwG,SAASzc,KAAKic,EAAM,UAAWD,KAC7CU,eAAe1c,KAAKic,EAAMD,EAASxC,EA9DvC,UA8DmDT,EAtC/C,SAAAiD,OACTjD,EAAQ,UAEJiD,QACC,OACO,gBAGP,UACA,UACA,MACO,gBAGP,SACA,MACO,YAOXjD,EAAMpZ,OAIJsW,EAAS0G,YAAY3c,KAAKic,EAAMlD,GAH5B,KAcwD6D,CAASZ,QAGvEa,cAAc7c,KAAK+D,KAjEf,UAiE2ByV,eArrB/B,SA0rBJqC,EAASnQ,UACNmQ,OACC,eACgB,IAAVnQ,EAAcoK,EAAS,SAAU/R,KAAKJ,QAAa+H,EAAnD,cAEN,iBACGtH,EAAMC,GAAG6L,OAAOxE,GACNA,EAAV,IAGGtH,EAAM8M,YAAYxF,OAExB,kBACM0L,EAASqF,SAASzc,KAAK+D,qBAGvB,qBA1sBN,SA+sBC8X,EAASjT,EAAWzD,OACxB2X,EAAO/Y,KAAK+F,SAASqN,SAAS4E,MAAMF,GACtCnQ,EAAQ,KACR8N,EAAO5Q,SAEHiT,OACC,aACG9X,KAAKqT,SAAS2F,OACVhZ,KAAK6K,QAAQwI,SAASzX,OAAS,IAAMoE,KAAK6K,QAAQwI,SAAS4F,KAAK,SAAAC,SAAiB,YAATA,IAChElZ,KAAKqT,SAAS8F,SAEd,UAGJ,sBAMH9Y,EAAMC,GAAGC,MAAMa,GAAiBpB,KAAK8X,GAAb1W,EAG7Bf,EAAMC,GAAGC,MAAMoH,OACP3H,KAAKJ,OAAOkY,GAASsB,UAI5B/Y,EAAMC,GAAGC,MAAMP,KAAK6K,QAAQiN,MAAc9X,KAAK6K,QAAQiN,GAAS1O,SAASzB,oBACrEkK,MAAMoC,KAAX,yBAAyCtM,EAAzC,SAAuDmQ,OAKtD9X,KAAKJ,OAAOkY,GAASjN,QAAQzB,SAASzB,oBAClCkK,MAAMoC,KAAX,sBAAsCtM,EAAtC,SAAoDmQ,MAQ3DzX,EAAMC,GAAG+F,QAAQoP,OACXsD,GAAQA,EAAK1P,cAAc,OAIjChJ,EAAMC,GAAG+F,QAAQoP,IAKRzV,KAAK+F,SAASqN,SAAS2E,KAAKD,GAASzO,cAArC,IAAuDrJ,KAAKJ,OAAOmU,WAAWa,KAAKjN,OAC3FpC,UAAY2M,EAASwG,SAASzc,KAAK+D,KAAM8X,EAASnQ,OAGlDV,EAASwO,GAAQA,EAAKpM,cAAL,gBAAmC1B,EAAnC,MAEnBtH,EAAMC,GAAG+F,QAAQY,OACVyO,SAAU,qBA3wBZ,sBAk0BHD,EAAOzV,KAAK+F,SAASqN,SAAS4E,MAAM3E,SAAShK,cAAc,MAG3DG,EAAS6J,EAASgG,UAAUpd,KAAK+D,MAAMpE,YACpCuc,UAAUlc,KAAK+D,KALX,WAKuBwJ,KAG9B6O,aAAa5C,KAGV2C,UAAUnc,KAAK+D,MAGnBwJ,OAKC8P,EAASjG,EAASgG,UAAUpd,KAAK+D,MAAMiP,IAAI,SAAAsK,mBAClClZ,EAAMC,GAAGC,MAAMgZ,EAAMJ,UAA6B,UAAjBI,EAAMJ,eAC3C9F,EAASqF,SAASzc,KAAKud,EAAMD,QAIjCE,kBACO,SACH1H,EAAS,WAAY/R,KAAKJ,YAI9BwG,QAAQ,SAAAmT,KACFZ,eAAe1c,KACpBud,EACAD,EAAMJ,SACN1D,EACA,WACA8D,EAAMvE,MACa,YAAnBuE,EAAMJ,SAAyBjH,EAAS0G,YAAY3c,KAAKud,EAAMD,EAAMJ,SAASpM,eAAiB,KAC/FwM,EAAMJ,SAASlM,gBAAkBuM,EAAKnG,SAAS8F,SAASlM,sBAK3DpC,QAAQwI,SAAWiG,EAAOrK,IAAI,SAAAsK,UAASA,EAAMJ,aAEzCL,cAAc7c,KAAK+D,KA9Cf,WA8C2ByV,kBA/2B/B,SAm3BA5K,iBAEJ7K,KAAKJ,OAAOsS,SAAS9I,SAAS,aAAgBpJ,KAAKJ,OAAOwT,SAAShK,SAAS,UAK5E/I,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASqN,SAAS4E,MAAM0B,QAO/CrZ,EAAMC,GAAGmC,MAAMoI,QACVA,QAAQ6O,MAAQ7O,GACd7K,KAAK4Q,SAAW5Q,KAAK2Z,gBACvB9O,QAAQ6O,OACT,GACA,IACA,EACA,KACA,IACA,KACA,SAKH7O,QAAQ6O,MAAQ1Z,KAAK6K,QAAQ6O,MAAM5L,OAAO,SAAA4L,UAASE,EAAKha,OAAO8Z,MAAM7O,QAAQzB,SAASsQ,SAGrFlQ,GAAUnJ,EAAMC,GAAGC,MAAMP,KAAK6K,QAAQ6O,QAAU1Z,KAAK6K,QAAQ6O,MAAM9d,OAAS,OACzEuc,UAAUlc,KAAK+D,KAtBX,QAsBuBwJ,KAG3B4O,UAAUnc,KAAK+D,MAGnBwJ,OAKCiM,EAAOzV,KAAK+F,SAASqN,SAAS4E,MAAM0B,MAAMrQ,cAAc,QAGxDgP,aAAa5C,QAGd5K,QAAQ6O,MAAMtT,QAAQ,SAAAsT,OACjB1E,EAAQ9C,EAASwG,SAASzc,KAAK2d,EAAM,QAASF,KAC3Cf,eAAe1c,KAAK2d,EAAMF,EAAOjE,EAzCjC,QAyC6CT,OAGjD8D,cAAc7c,KAAK+D,KA5Cf,QA4C2ByV,gBA16B/B,eA+6BDsC,EAAS/X,KAAK+F,SAASqN,SAAvB2E,KACFnB,GAAWvW,EAAMC,GAAGC,MAAMwX,IAASzW,OAAOuY,OAAO9B,GAAMkB,KAAK,SAAAa,UAAQA,EAAIxR,WAExExD,aAAa9E,KAAK+F,SAASqN,SAASwB,MAAOgC,eAl7BxC,SAs7BF9M,OACCiQ,EAAS/Z,KAAK+F,SAASqN,SAAvB2G,KACFjF,EAAS9U,KAAK+F,SAAS6M,QAAQQ,YAGhC/S,EAAMC,GAAG+F,QAAQ0T,IAAU1Z,EAAMC,GAAG+F,QAAQyO,QAI3CkF,EAAO3Z,EAAMC,GAAGkI,QAAQsB,GAASA,EAAQzJ,EAAMC,GAAG+F,QAAQ0T,IAASA,EAAKtR,aAAa,aAEvFpI,EAAMC,GAAGwJ,MAAMA,GAAQ,KACjBmQ,EAAa5Z,EAAMC,GAAG+F,QAAQ0T,IAASA,EAAKjR,SAASgB,EAAM7C,QAC3DiT,EAAWpQ,EAAM7C,SAAWjH,KAAK+F,SAAS6M,QAAQQ,YAKpD6G,IAAgBA,IAAeC,GAAYF,SAK3CE,KACMC,kBAKV9Z,EAAMC,GAAG+F,QAAQyO,MACV/P,aAAa,gBAAiBiV,GAGrC3Z,EAAMC,GAAG+F,QAAQ0T,OACXjV,aAAaiV,GAAOC,KACpBlD,YAAY9W,KAAK+F,SAASlB,UAAW7E,KAAKJ,OAAOmU,WAAWa,KAAK5Q,KAAMgW,GAEzEA,IACKtR,gBAAgB,cAEhB3D,aAAa,YAAa,iBA99B9B,SAo+BF+U,OACDM,EAAQN,EAAItT,WAAU,KACtBzD,MAAMsX,SAAW,aACjBtX,MAAMuX,QAAU,IAChB5R,gBAAgB,gBAGhBxC,KAAKkU,EAAMzV,iBAAiB,gBAAgByB,QAAQ,SAAAhF,OAChDmZ,EAAOnZ,EAAMkK,aAAa,UAC1BvG,aAAa,OAAWwV,EAA9B,cAIA7T,WAAWtI,YAAYgc,OAGrB7K,EAAQ6K,EAAMI,YACdhL,EAAS4K,EAAMK,sBAGfvT,cAAckT,+BAx/BX,eAigCLnT,EAAa5D,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,GAAAA,UAAA,GAAJ,GACLuR,EAAS5U,KAAK+F,SAASqN,SAAvBwB,KACFmE,EAAOpc,SAAS+d,eAAezT,MAGhC5G,EAAMC,GAAG+F,QAAQ0S,IAKsB,aAA9BA,EAAKzN,aAAa,aAO1BM,EAAUgJ,EAAKvL,cAAc,mCAC7BxE,EAAY+G,EAAQlF,oBAGpBR,KAAK0O,EAAKjQ,iBAAL,mBAAyCiH,EAAQN,aAAa,MAA9D,OAA0ElF,QAAQ,SAAAoD,KAClFzE,aAAa,iBAAiB,KAIrC+F,EAAQ6P,cAAgB7P,EAAQ8P,cAAe,GAErC7X,MAAMwM,MAAW3D,EAAQ4O,YAAnC,OACUzX,MAAMyM,OAAY5D,EAAQ6O,aAApC,SAGMI,EAAO3I,EAAS4I,WAAW7e,KAAK+D,KAAM+Y,KAqBtC3O,GAAGvF,EAAWxE,EAAM4Q,mBAlBV,SAAV8J,EAAUte,GAERA,EAAEwK,SAAWpC,IACb,QACA,UACFuE,SAAS3M,EAAEue,kBAKHjY,MAAMwM,MAAQ,KACdxM,MAAMyM,OAAS,KAGnBnF,IAAIxF,EAAWxE,EAAM4Q,mBAAoB8J,QAOzChY,MAAMwM,MAAWsL,EAAKtL,MAAhC,OACUxM,MAAMyM,OAAYqL,EAAKrL,OAAjC,OAIE1K,aAAa8G,GAAS,KACpB7G,aAAa,YAAa,KAG5BD,aAAaiU,GAAM,OAEnBhB,EAAO1X,EAAMqJ,YAAYzN,KAAK+D,KAAvB,mBAAgDiH,EAAhD,YACPf,KAAK6R,GAAM3R,QAAQ,SAAA0T,KACjB/U,aAAa,iBAAiB,OAEjC2D,gBAAgB,cAGhB/D,iBAAiB,2DAA2D,GAAGuF,iBA3kC3E,SAglCNjF,iBAEC5E,EAAMC,GAAGC,MAAMP,KAAKJ,OAAOsS,iBACpB,SAILrN,EAAYxE,EAAMjD,cAAc,MAAOiD,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUT,SAASlM,aAGxGhG,KAAKJ,OAAOsS,SAAS9I,SAAS,cACpBhL,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,YAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,aACpBhL,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,WAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,WACpBhL,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,SAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,mBACpBhL,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,iBAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,YAAa,KACrCmK,EAAWlT,EAAMjD,cAAc,MAAOiD,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUY,WAG5FE,EAAOvB,EAASgJ,YAAYjf,KAAK+D,KAAM,wBACxBiF,EAAKT,UAEjBpG,YAAYqV,EAAKuB,SACjB5W,YAAYqV,EAAKrS,SAGjBhD,YAAY8T,EAASiJ,eAAelf,KAAK+D,KAAM,WAKpDA,KAAKJ,OAAO4W,SAAS/C,KAAM,KACrBO,EAAU3T,EAAMjD,cAClB,cAEW4C,KAAKJ,OAAOmU,WAAWC,SAElC,WAGK5V,YAAY4V,QAChBjO,SAAS4N,QAAQG,YAAcE,OAGnCjO,SAASwN,SAAWA,IACfnV,YAAY4B,KAAK+F,SAASwN,aAIpCvT,KAAKJ,OAAOsS,SAAS9I,SAAS,mBACpBhL,YAAY8T,EAASkJ,WAAWnf,KAAK+D,KAAM,gBAIrDA,KAAKJ,OAAOsS,SAAS9I,SAAS,eACpBhL,YAAY8T,EAASkJ,WAAWnf,KAAK+D,KAAM,aAIrDA,KAAKJ,OAAOsS,SAAS9I,SAAS,WACpBhL,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,SAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,UAAW,KACnCsK,EAASrT,EAAMjD,cAAc,aACxB,iBAILyJ,OACG,OACC,UACC7G,KAAKJ,OAAO8T,QAIjBxY,EAAQgX,EAASgJ,YAAYjf,KAC/B+D,KACA,SACAK,EAAMS,OAAO+F,qBACU5B,EAAKT,QAGzBpG,YAAYlD,EAAM8Z,SAClB5W,YAAYlD,EAAMkG,YAEpB2E,SAAS2N,OAASA,IAEbtV,YAAYsV,MAItB1T,KAAKJ,OAAOsS,SAAS9I,SAAS,eACpBhL,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,aAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,cAAgB/I,EAAMC,GAAGC,MAAMP,KAAKJ,OAAOwT,UAAW,KAC9EwB,EAAOvU,EAAMjD,cAAc,aACtB,oBACC,OAGPgB,YACD8T,EAAS+I,aAAahf,KAAK+D,KAAM,uCACDiF,EAAKT,oBAChB,mCACiBS,EAAKT,oBACtB,SAInBuV,EAAO1Z,EAAMjD,cAAc,cACtB,4CACc6H,EAAKT,UAClB,8CACoCS,EAAKT,QAC3C,oBACK,IAGT6W,EAAQhb,EAAMjD,cAAc,OAE5Bke,EAAOjb,EAAMjD,cAAc,2BACR6H,EAAKT,GAA1B,mDAC4CS,EAAKT,QAC3C,aAIJuT,EAAO1X,EAAMjD,cAAc,WACvB,iBAILwC,OAAOwT,SAAShN,QAAQ,SAAAtI,OACnBgc,EAAMzZ,EAAMjD,cAAc,WACtB,aACE,KAGN0X,EAASzU,EAAMjD,cACjB,SACAiD,EAAMS,OAAOT,EAAMiV,0BAA0BiG,EAAK3b,OAAO+S,UAAUC,QAAQQ,gBACjE,eACImI,EAAK3b,OAAOmU,WAAWoB,QAAjC,IAA4CoG,EAAK3b,OAAOmU,WAAWoB,QAAnE,gCACqBlQ,EAAKT,GAA1B,IAAgC1G,EAAhC,wBACiB,mCACiBmH,EAAKT,GAAvC,IAA6C1G,mBAC5B,IAErBiU,EAASjU,EAAMyd,EAAK3b,SAGlB+H,EAAQtH,EAAMjD,cAAc,cACvBme,EAAK3b,OAAOmU,WAAWa,KAAKjN,UAIjCpC,UAAYN,EAAKnH,KAEhBM,YAAYuJ,KACfvJ,YAAY0W,KACX1W,YAAY0b,KAEZ/T,SAASqN,SAAS2E,KAAKja,GAAQgc,MAGnC1b,YAAY2Z,KACX3Z,YAAYkd,QAGb1b,OAAOwT,SAAShN,QAAQ,SAAAtI,OACnBib,EAAO1Y,EAAMjD,cAAc,2BACR6H,EAAKT,GAA1B,IAAgC1G,SACxB,uCAC6BmH,EAAKT,GAA1C,IAAgD1G,EAAhD,YACM,qBACK,IAGT0d,EAAOnb,EAAMjD,cACf,eAEU,eACIme,EAAK3b,OAAOmU,WAAWoB,QAAjC,IAA4CoG,EAAK3b,OAAOmU,WAAWoB,QAAnE,0BACiB,mCACiBlQ,EAAKT,GAAvC,yBACiB,GAErBuN,EAASjU,EAAMyd,EAAK3b,WAGnBxB,YAAYod,OAEX3Q,EAAUxK,EAAMjD,cAAc,QAE/BgB,YAAYyM,KACXzM,YAAY2a,KAEbhT,SAASqN,SAAS4E,MAAMla,GAAQib,MAGpC3a,YAAYid,KACZjd,YAAY2b,KACP3b,YAAYwW,QAEjB7O,SAASqN,SAAS2G,KAAOA,OACzBhU,SAASqN,SAASwB,KAAOA,SAI9B5U,KAAKJ,OAAOsS,SAAS9I,SAAS,QAAU0B,EAAQoI,OACtC9U,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,QAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,YAAc0B,EAAQqI,WAC1C/U,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,YAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,iBACpBhL,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,eAIvDA,KAAKJ,OAAOsS,SAAS9I,SAAS,oBACzBrD,SAASlB,UAAUzG,YAAY8T,EAAS+I,aAAahf,KAAK+D,KAAM,oBAGpE+F,SAASmM,SAAWrN,EAErB7E,KAAK4Q,WACI6K,eAAexf,KAAK+D,KAAMmR,EAAMuK,kBAAkBzf,KAAK+D,SAG3D2b,aAAa1f,KAAK+D,MAEpB6E,UA/0CE,yBAq1CL7E,KAAKJ,OAAOgc,WAAY,KAClBtH,EAAOpC,EAASiC,WAAWlY,KAAK+D,MAGlCsU,EAAKnC,QACCyJ,WAAWtH,EAAKnR,IAAK,oBAK9BqB,GAAKoB,KAAKC,MAAsB,IAAhBD,KAAKE,cAGtBjB,EAAY,UACXkB,SAASmM,SAAW,SAGnB2J,MACE7b,KAAKwE,YACCxE,KAAKJ,OAAOoS,eACfhS,KAAKJ,OAAOqS,OAEnB6J,GAAS,EAETzb,EAAMC,GAAGK,OAAOX,KAAKJ,OAAOsS,WAAa7R,EAAMC,GAAG+F,QAAQrG,KAAKJ,OAAOsS,YAE1DlS,KAAKJ,OAAOsS,SACjB7R,EAAMC,GAAGmK,SAASzK,KAAKJ,OAAOsS,YAGzBlS,KAAKJ,OAAOsS,SAASjW,KAAK+D,KAAM6b,MAGhC3J,EAAS6J,OAAO9f,KAAK+D,SACzBA,KAAKwE,YACCxE,KAAKJ,OAAOoS,eACfhS,KAAK0Z,cACH1Z,KAAKiY,iBACJ5E,EAASqF,SAASzc,KAAK+D,WAI5B,OAIP9C,EAAU,SAAAkE,OACRvD,EAASuD,gBAENoG,QAAQqU,GAAOzV,QAAQ,SAAAqB,gBAC1B3H,EAEE4H,EAAA,GADFC,EACED,EAAA,KACOrH,EAAM6M,WAAWrP,EAAjB,IAA6BiC,EAA7B,IAAqC6H,KAG3C9J,GAIPie,IACIzb,EAAMC,GAAGK,OAAOX,KAAKJ,OAAOsS,YAChBhV,EAAQ2H,GACbxE,EAAMC,GAAG+F,QAAQxB,OACdU,UAAYrI,EAAQ2H,EAAUU,iBAK5C0B,OAAAA,KAGA5G,EAAMC,GAAGK,OAAOX,KAAKJ,OAAO+S,UAAUT,SAASrN,eACtClI,SAAS0M,cAAcrJ,KAAKJ,OAAO+S,UAAUT,SAASrN,YAI9DxE,EAAMC,GAAG+F,QAAQY,OACTjH,KAAK+F,SAASlB,WAIvBxE,EAAMC,GAAG+F,QAAQxB,KACVzG,YAAYyG,GACZA,KACAgR,mBAAmB,YAAahR,GAItCxE,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASmM,aACvB8J,aAAa/f,KAAK+D,MAI3BE,OAAO8C,UAAUC,UAAUmG,SAAS,WAC9B6S,QAAQhV,GAIdjH,KAAKJ,OAAO4W,SAAStE,SAAU,KACzBgK,EAAS7b,EAAMqJ,YAAYzN,KAC7B+D,MAEIA,KAAKJ,OAAO+S,UAAUT,SAASlM,QAC/B,IACAhG,KAAKJ,OAAO+S,UAAUuJ,OACtB,KACAlc,KAAKJ,OAAOmU,WAAWzL,QACzB6G,KAAK,WAGLjJ,KAAKgW,GAAQ9V,QAAQ,SAAA4O,KACjB8B,YAAY9B,EAAOmH,EAAKvc,OAAOmU,WAAWzL,QAAQ,KAClDwO,YAAY9B,EAAOmH,EAAKvc,OAAOmU,WAAWC,SAAS,KACnDjP,aAAa,OAAQ,gBC18CrCsO,SAAW,cAIJrT,KAAKD,UAAUkQ,QAKdmM,EAASpc,KAAKH,QAAQgB,IAAI,eAE3BR,EAAMC,GAAGC,MAAM6b,UACX/I,SAAS8F,SAAWiD,GAGzB/b,EAAMC,GAAGC,MAAMP,KAAKqT,SAAS8F,iBACxB9F,SAAS8F,SAAWnZ,KAAKJ,OAAOyT,SAAS8F,SAASlM,gBAItD5M,EAAMC,GAAGkI,QAAQxI,KAAKqT,SAAS2F,QAAS,KACnCA,EAAShZ,KAAKH,QAAQgB,IAAI,YAE5BR,EAAMC,GAAGkI,QAAQwQ,QACZ3F,SAAS2F,OAASA,OAElB3F,SAAS2F,OAAShZ,KAAKJ,OAAOyT,SAAS2F,WAK/ChZ,KAAK8Q,SAAW9Q,KAAKqc,WAAcrc,KAAK4Q,UAAY9F,EAAQwR,WAEzDjc,EAAMC,GAAGmC,MAAMzC,KAAKJ,OAAOsS,WAAalS,KAAKJ,OAAOsS,SAAS9I,SAAS,aAAepJ,KAAKJ,OAAOwT,SAAShK,SAAS,eAC1GmT,gBAAgBtgB,KAAK+D,WAOjCK,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASsN,iBAC3BtN,SAASsN,SAAWhT,EAAMjD,cAAc,MAAOiD,EAAMiV,0BAA0BtV,KAAKJ,OAAO+S,UAAUU,aAEpGmJ,YAAYxc,KAAK+F,SAASsN,SAAUrT,KAAK+F,SAASC,YAItD8Q,YAAY9W,KAAK+F,SAASlB,UAAW7E,KAAKJ,OAAOmU,WAAWV,SAAS1T,SAAUU,EAAMC,GAAGC,MAAM8S,EAASgG,UAAUpd,KAAK+D,YAGtHsZ,EAASjG,EAASgG,UAAUpd,KAAK+D,UAGnCK,EAAMC,GAAGC,MAAM+Y,OAKHjZ,EAAM8P,aAIVqC,MAAQtS,OAAOkS,IAAK,KACtBrM,EAAW/F,KAAK2Q,MAAMhM,iBAAiB,eAEvCuB,KAAKH,GAAUK,QAAQ,SAAAmT,OACnBhc,EAAMgc,EAAMjO,aAAa,OACzBhO,EAAO+C,EAAMsO,SAASpR,GAExBD,EAAKmf,WAAavc,OAAOoS,SAAShV,KAAKmf,WACvC,QACA,UACFrT,SAAS9L,EAAKof,aAEPvX,MAAM5H,EAAK,QACX6H,KAAK,SAAAuX,KACI5X,aAAa,MAAO7E,OAAOkS,IAAIwK,gBAAgBD,MAExDtX,MAAM,aACG6B,cAAcqS,SAO/BsD,YAAY5gB,KAAK+D,QAGjBga,KAAK/d,KAAK+D,MAGfK,EAAMC,GAAGmC,MAAMzC,KAAKJ,OAAOsS,WAAalS,KAAKJ,OAAOsS,SAAS9I,SAAS,aAAepJ,KAAKJ,OAAOwT,SAAShK,SAAS,eAC1GmT,gBAAgBtgB,KAAK+D,sBA9FzB,yBAqGLA,KAAK4Q,SAAW5Q,KAAK8Q,QAAS,GACrBuI,UAAUpd,KAAK+D,MAAMoG,QAAQ,SAAAmT,KAE5BnP,GAAGmP,EAAO,YAAa,SAAAzP,UAASuJ,EAASyJ,OAAO7gB,KAAKia,EAAMpM,OAI3DiT,KAAO,eAIXC,EAAe3J,EAAS4J,gBAAgBhhB,KAAK+D,MAG/CK,EAAMC,GAAGiZ,MAAMyD,IAEXnb,MAAMqE,KAAK8W,EAAaE,gBAAkBthB,UACjCkhB,OAAO7gB,KAAK+D,KAAMgd,QAG5Bhd,KAAK2Z,SAAW3Z,KAAKqT,SAAS2F,aAChCmE,MAAMC,gBAAgBpd,KAAKmZ,qBA1H3B,kBAiIL9Y,EAAMC,GAAGsB,gBAAgB5B,KAAK2Q,UAK3B9O,MAAMqE,KAAKlG,KAAK2Q,MAAM2L,gBAAkBxO,OAAO,SAAAyL,UAClD,WACA,aACFnQ,SAASmQ,EAAM/W,yBAzIR,sBA8IH8W,EAASjG,EAASgG,UAAUpd,KAAK+D,UAElCsZ,EAAO1d,cACD,SAIP2d,EAAQD,EAAOzM,KAAK,SAAA0M,UAASA,EAAMJ,SAASlM,gBAAkB8J,EAAKoC,YAGlEI,MACOlZ,EAAMqS,WAAWzW,KAAK+D,KAAM,mBAInCuZ,SACSD,EADF,GAAA,WAILC,YAjKE,SAqKJA,OACDyD,EAAezD,SAEdlZ,EAAMC,GAAGiZ,MAAMyD,IAAiBlS,EAAQwR,YAActc,KAAKqT,SAAS2F,WACtD3F,EAAS4J,gBAAgBhhB,KAAK+D,OAG7CK,EAAMC,GAAGiZ,MAAMyD,GACV3c,EAAMC,GAAGC,MAAMyc,EAAahI,OAI5B3U,EAAMC,GAAGC,MAAMyc,EAAa7D,UAI1BpH,EAAS,UAAW/R,KAAKJ,QAHrB2Z,EAAMJ,SAASpM,cAJfiQ,EAAahI,MAUrBjD,EAAS,WAAY/R,KAAKJ,gBAxLxB,SA4LNwB,OAEGmY,EAAQlZ,EAAMC,GAAGwJ,MAAM1I,GAASA,EAAM6F,OAAS7F,EAC7C8b,EAAe3D,EAAf2D,WACFlE,EAASkE,EAAWthB,QAAUshB,EAAW,GAI3C3D,IAHiBlG,EAAS4J,gBAAgBhhB,KAAK+D,QAQ/CK,EAAMC,GAAG+c,IAAIrE,KACJsE,QAAQrhB,KAAK+D,KAAMgZ,EAAOuE,kBAE1BD,QAAQrhB,KAAK+D,KAAM,QAG1BmL,cAAclP,KAAK+D,KAAMA,KAAK2Q,MAAO,uBA/MlC,SAmNLvP,MAECpB,KAAKD,UAAUkQ,MAIhB5P,EAAMC,GAAG+F,QAAQrG,KAAK+F,SAASsN,UAAW,KACpCnO,EAAU7E,EAAMjD,cAAc,UAG9Bib,aAAarY,KAAK+F,SAASsN,cAG3BmK,EAAWnd,EAAMC,GAAGsB,gBAAgBR,GAAiB,GAARA,EAG/Cf,EAAMC,GAAGK,OAAO6c,KACRxW,UAAYwW,EAAQ/e,SAEpBL,YAAYof,QAInBzX,SAASsN,SAASjV,YAAY8G,aAE9B2M,MAAMoC,KAAK,0CA5OX,eAmPL+E,EAAShZ,KAAKH,QAAQgB,IAAI,YAGzBR,EAAMC,GAAGkI,QAAQwQ,QAGb3F,SAAS2F,OAASA,IAFThZ,KAAKJ,OAAOyT,SAAvB2F,OAKHA,MACMlC,YAAY9W,KAAK+F,SAASlB,UAAW7E,KAAKJ,OAAOmU,WAAWV,SAAS2F,QAAQ,KAC7E5N,YAAYpL,KAAK+F,SAAS6M,QAAQS,UAAU,MCpQxDoK,EAAO,aAEQC,EAAAA,4BACL/d,EAAiB0D,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,kBACpB1D,QAAUO,OAAOyd,SAAWhe,EAE7BK,KAAKL,cACAmS,IAAI,kEAMN9R,KAAKL,QAAUgC,SAASoH,UAAU6U,KAAK3hB,KAAK0hB,QAAQ7L,IAAK6L,SAAWF,sCAIpEzd,KAAKL,QAAUgC,SAASoH,UAAU6U,KAAK3hB,KAAK0hB,QAAQ1J,KAAM0J,SAAWF,uCAIrEzd,KAAKL,QAAUgC,SAASoH,UAAU6U,KAAK3hB,KAAK0hB,QAAQxhB,MAAOwhB,SAAWF,QAnBhEC,GCFfG,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,cAGF,sBAGQ,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACG7a,UAAUmW,UAAYnW,UAAU8a,cAAc/V,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,0BACF,aACC,oBACM,2BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,mDAMP,qBACI,kBACH,4BACA,mCACS,sCACR,6BACO,2BACV,oBACI,wBACA,uBACD,uBACC,wBACA,sBACF,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KC/XfmI,EAAU7P,EAAM8P,aAEtB,SAAS4N,OACA/d,KAAKL,aAKJmV,EAAS9U,KAAKN,OAAOqG,SAAS6M,QAAQU,WACxCjT,EAAMC,GAAG+F,QAAQyO,MACX1J,YAAY0J,EAAQ9U,KAAKgZ,UAI7B7N,cAAclP,KAAK+D,KAAKN,OAAQM,KAAKiH,OAAQjH,KAAKgZ,OAAS,kBAAoB,kBAAkB,GAGlG9I,EAAQ8N,SACHC,UAAUhiB,KAAK+D,KAAKN,OAAQM,KAAKiH,OAAQjH,KAAKgZ,SAI5D,SAASkF,QAAe1U,EAAgBnG,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,GAEhCmG,OACK2U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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","Storage","player","enabled","config","storage","key","supported","this","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","object","get","extend","setItem","stringify","removeItem","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","minWidth","image","Image","handler","naturalWidth","assign","id","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","data","content","fetch","then","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","_ref2","value","sel","existingAttributes","existing","split","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","_len","_key","toString","match","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","source","shift","defineProperty","apply","concat","toConsumableArray","filter","item","indexOf","reduce","obj","prev","curr","abs","youtube","vimeo","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","cors","URL","iconUrl","location","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","_this","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","_this7","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","blob","createObjectURL","toggleCaptions","bind","userLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","global","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","_this11","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","setLanguage","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,+BACF,+BACE,mCAEF,2BACA,gCAEG,mDAMP,qBACI,kBACH,4BACA,mCACS,sCACR,6BACO,2BACV,oBACI,wBACA,uBACD,uBACC,wBACA,sBACF,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KCzYf7N,EAAU9P,EAAM+P,aAEtB,SAAS6N,OACAje,KAAKL,aAKJsV,EAASjV,KAAKN,OAAOqG,SAASgN,QAAQU,WACxCpT,EAAMC,GAAG+F,QAAQ4O,MACX7J,YAAY6J,EAAQjV,KAAKmZ,UAI7BhO,cAAclP,KAAK+D,KAAKN,OAAQM,KAAKiH,OAAQjH,KAAKmZ,OAAS,kBAAoB,kBAAkB,GAGlGhJ,EAAQ+N,SACHC,UAAUliB,KAAK+D,KAAKN,OAAQM,KAAKiH,OAAQjH,KAAKmZ,SAI5D,SAASiF,QAAe5U,EAAgBnG,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,GAEhCmG,OACK6U,kBACEne,OAAOoe,SAAW,IAClBpe,OAAOqe,SAAW,UAGlBC,SAASxe,KAAKqe,eAAepgB,EAAG+B,KAAKqe,eAAeI,YAItDjZ,KAAKzC,MA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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.language,\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Set toggled state\n this.toggleCaptions(active);\n\n // Watch changes to textTracks and update captions menu\n if (this.config.captions.update) {\n utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n update() {\n // Update tracks\n const tracks = captions.getTracks.call(this);\n this.options.captions = tracks.map(({language}) => language);\n\n // Set language if it hasn't been set already\n if (!this.language) {\n let { language } = this.config.captions;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n this.language = this.storage.get('language') || (language || '').toLowerCase();\n }\n\n // Toggle the class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js index 096f7006..74a60604 100644 --- a/dist/plyr.polyfilled.js +++ b/dist/plyr.polyfilled.js @@ -20,7 +20,7 @@ if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef }); var _core = createCommonjsModule(function (module) { -var core = module.exports = { version: '2.5.6' }; +var core = module.exports = { version: '2.5.3' }; if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef }); var _core_1 = _core.version; @@ -333,18 +333,11 @@ var _arrayIncludes = function (IS_INCLUDES) { }; }; -var _shared = createCommonjsModule(function (module) { var SHARED = '__core-js_shared__'; var store = _global[SHARED] || (_global[SHARED] = {}); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: _core.version, - mode: _library ? 'pure' : 'global', - copyright: '© 2018 Denis Pushkarev (zloirock.ru)' -}); -}); +var _shared = function (key) { + return store[key] || (store[key] = {}); +}; var shared = _shared('keys'); @@ -998,7 +991,7 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC var VALUES_BUG = false; var proto = Base.prototype; var $native = proto[ITERATOR$2] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; - var $default = $native || getMethod(DEFAULT); + var $default = (!BUGGY && $native) || getMethod(DEFAULT); var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; var methods, key, IteratorPrototype; @@ -1009,7 +1002,7 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC // Set @@toStringTag to native iterators _setToStringTag(IteratorPrototype, TAG, true); // fix for some old engines - if (!_library && typeof IteratorPrototype[ITERATOR$2] != 'function') _hide(IteratorPrototype, ITERATOR$2, returnThis); + if (!_library && !_has(IteratorPrototype, ITERATOR$2)) _hide(IteratorPrototype, ITERATOR$2, returnThis); } } // fix Array#{values, @@iterator}.name in V8 / FF @@ -2503,11 +2496,9 @@ function set(target, propertyKey, V /* , receiver */) { } if (_has(ownDesc, 'value')) { if (ownDesc.writable === false || !_isObject(receiver)) return false; - if (existingDescriptor = _objectGopd.f(receiver, propertyKey)) { - if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; - existingDescriptor.value = V; - _objectDp.f(receiver, propertyKey, existingDescriptor); - } else _objectDp.f(receiver, propertyKey, _propertyDesc(0, V)); + existingDescriptor = _objectGopd.f(receiver, propertyKey) || _propertyDesc(0); + existingDescriptor.value = V; + _objectDp.f(receiver, propertyKey, existingDescriptor); return true; } return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true); @@ -2652,8 +2643,7 @@ var _microtask = function () { }; // environments with maybe non-completely correct, but existent Promise } else if (Promise$1 && Promise$1.resolve) { - // Promise.resolve without an argument throws an error in LG WebOS 2 - var promise = Promise$1.resolve(undefined); + var promise = Promise$1.resolve(); notify = function () { promise.then(flush); }; @@ -2710,10 +2700,6 @@ var _perform = function (exec) { } }; -var navigator$1 = _global.navigator; - -var _userAgent = navigator$1 && navigator$1.userAgent || ''; - var _promiseResolve = function (C, x) { _anObject(C); if (_isObject(x) && x.constructor === C) return x; @@ -2728,12 +2714,9 @@ var microtask = _microtask(); - var PROMISE = 'Promise'; var TypeError$1 = _global.TypeError; var process$2 = _global.process; -var versions = process$2 && process$2.versions; -var v8 = versions && versions.v8 || ''; var $Promise = _global[PROMISE]; var isNode$1 = _classof(process$2) == 'process'; var empty = function () { /* empty */ }; @@ -2748,13 +2731,7 @@ var USE_NATIVE = !!function () { exec(empty, empty); }; // unhandled rejections tracking support, NodeJS Promise without it fails @@species test - return (isNode$1 || typeof PromiseRejectionEvent == 'function') - && promise.then(empty) instanceof FakePromise - // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables - // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 - // we can't detect it synchronously, so just check versions - && v8.indexOf('6.6') !== 0 - && _userAgent.indexOf('Chrome/66') === -1; + return (isNode$1 || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; } catch (e) { /* empty */ } }(); @@ -2776,7 +2753,7 @@ var notify = function (promise, isReject) { var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; - var result, then, exited; + var result, then; try { if (handler) { if (!ok) { @@ -2786,11 +2763,8 @@ var notify = function (promise, isReject) { if (handler === true) result = value; else { if (domain) domain.enter(); - result = handler(value); // may throw - if (domain) { - domain.exit(); - exited = true; - } + result = handler(value); + if (domain) domain.exit(); } if (result === reaction.promise) { reject(TypeError$1('Promise-chain cycle')); @@ -2799,7 +2773,6 @@ var notify = function (promise, isReject) { } else resolve(result); } else reject(value); } catch (e) { - if (domain && !exited) domain.exit(); reject(e); } }; @@ -4182,6 +4155,10 @@ var _stringPad = function (that, maxLength, fillString, left) { return left ? stringFiller + S : S + stringFiller; }; +var navigator$1 = _global.navigator; + +var _userAgent = navigator$1 && navigator$1.userAgent || ''; + // https://github.com/tc39/proposal-string-pad-start-end @@ -6706,6 +6683,14 @@ var utils = { }, + // Get a nested value in an object + getDeep: function getDeep(object, path) { + return path.split('.').reduce(function (obj, key) { + return obj && obj[key]; + }, object); + }, + + // Get the closest value in an array closest: function closest(array, value) { if (!utils.is.array(array) || !array.length) { @@ -7125,6 +7110,13 @@ var html5 = { player.media.src = supported[0].getAttribute('src'); + // Restore time + var onLoadedMetaData = function onLoadedMetaData() { + player.currentTime = currentTime; + player.off('loadedmetadata', onLoadedMetaData); + }; + player.on('loadedmetadata', onLoadedMetaData); + // Load new source player.media.load(); @@ -7133,9 +7125,6 @@ var html5 = { player.play(); } - // Restore time - player.currentTime = currentTime; - // Trigger change event utils.dispatchEvent.call(player, player.media, 'qualitychange', false, { quality: input @@ -7177,11 +7166,15 @@ var i18n = { var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) { + if (utils.is.empty(key) || utils.is.empty(config)) { return ''; } - var string = config.i18n[key]; + var string = utils.getDeep(config.i18n, key); + + if (utils.is.empty(string)) { + return ''; + } var replace = { '{seektime}': config.seekTime, @@ -7855,27 +7848,7 @@ var controls = { // Get the badge HTML for HD, 4K etc var getBadge = function getBadge(quality) { - var label = ''; - - switch (quality) { - case 2160: - label = '4K'; - break; - - case 1440: - case 1080: - case 720: - label = 'HD'; - break; - - case 576: - case 480: - label = 'SD'; - break; - - default: - break; - } + var label = i18n.get('qualityBadge.' + quality, _this3.config); if (!label.length) { return null; @@ -7898,7 +7871,6 @@ var controls = { // Translate a value into a nice label - // TODO: Localisation getLabel: function getLabel(setting, value) { switch (setting) { case 'speed': @@ -7906,7 +7878,13 @@ var controls = { case 'quality': if (utils.is.number(value)) { - return value + 'p'; + var label = i18n.get('qualityLabel.' + value, this.config); + + if (!label.length) { + return value + 'p'; + } + + return label; } return utils.toTitleCase(value); @@ -8066,12 +8044,7 @@ var controls = { // Generate options tracks.forEach(function (track) { - controls.createMenuItem.call(_this4, track.language, list, 'language', track.label, track.language !== 'enabled' ? controls.createBadge.call(_this4, track.language.toUpperCase()) : null, track.language.toLowerCase() === _this4.captions.language.toLowerCase()); - }); - - // Store reference - this.options.captions = tracks.map(function (track) { - return track.language; + controls.createMenuItem.call(_this4, track.language, list, 'language', track.label, track.language !== 'enabled' ? controls.createBadge.call(_this4, track.language.toUpperCase()) : null, track.language.toLowerCase() === _this4.language); }); controls.updateSetting.call(this, type, list); @@ -8674,28 +8647,6 @@ var captions = { return; } - // Set default language if not set - var stored = this.storage.get('language'); - - if (!utils.is.empty(stored)) { - this.captions.language = stored; - } - - if (utils.is.empty(this.captions.language)) { - this.captions.language = this.config.captions.language.toLowerCase(); - } - - // Set captions enabled state if not set - if (!utils.is.boolean(this.captions.active)) { - var active = this.storage.get('captions'); - - if (utils.is.boolean(active)) { - this.captions.active = active; - } else { - this.captions.active = this.config.captions.active; - } - } - // Only Vimeo and HTML5 video supported at this point if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) { // Clear menu and hide @@ -8713,17 +8664,6 @@ var captions = { utils.insertAfter(this.elements.captions, this.elements.wrapper); } - // Set the class hook - utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); - - // Get tracks - var tracks = captions.getTracks.call(this); - - // If no caption file exists, hide container for caption text - if (utils.is.empty(tracks)) { - return; - } - // Get browser info var browser = utils.getBrowser(); @@ -8746,14 +8686,52 @@ var captions = { }); } - // Set language - captions.setLanguage.call(this); + // Try to load the value from storage + var active = this.storage.get('captions'); + + // Otherwise fall back to the default config + if (!utils.is.boolean(active)) { + active = this.config.captions.active; + } + + // Set toggled state + this.toggleCaptions(active); - // Enable UI - captions.show.call(this); + // Watch changes to textTracks and update captions menu + if (this.config.captions.update) { + utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this)); + } - // Set available languages in list - if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) { + // Update available languages in list next tick (the event must not be triggered before the listeners) + setTimeout(captions.update.bind(this), 0); + }, + update: function update() { + // Update tracks + var tracks = captions.getTracks.call(this); + this.options.captions = tracks.map(function (_ref) { + var language = _ref.language; + return language; + }); + + // Set language if it hasn't been set already + if (!this.language) { + var language = this.config.captions.language; + + if (language === 'auto') { + var _split = (navigator.language || navigator.userLanguage).split('-'); + + var _split2 = slicedToArray(_split, 1); + + language = _split2[0]; + } + this.language = this.storage.get('language') || (language || '').toLowerCase(); + } + + // Toggle the class hooks + utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); + + // Update available languages in list + if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) { controls.setCaptionsMenu.call(this); } }, @@ -8914,25 +8892,6 @@ var captions = { } else { this.debug.warn('No captions element to render to'); } - }, - - - // Display captions container and button (for initialization) - show: function show() { - // Try to load the value from storage - var active = this.storage.get('captions'); - - // Otherwise fall back to the default config - if (!utils.is.boolean(active)) { - active = this.config.captions.active; - } else { - this.captions.active = active; - } - - if (active) { - utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true); - utils.toggleState(this.elements.buttons.captions, true); - } } }; @@ -9073,7 +9032,10 @@ var defaults$1 = { // Captions settings captions: { active: false, - language: (navigator.language || navigator.userLanguage).split('-')[0] + language: 'auto', + // Listen to new tracks added after Plyr is initialized. + // This is needed for streaming captions, but may result in unselectable options + update: false }, // Fullscreen settings @@ -9130,7 +9092,15 @@ var defaults$1 = { reset: 'Reset', disabled: 'Disabled', enabled: 'Enabled', - advertisement: 'Ad' + advertisement: 'Ad', + qualityBadge: { + 2160: '4K', + 1440: 'HD', + 1080: 'HD', + 720: 'HD', + 576: 'SD', + 480: 'SD' + } }, // URLs @@ -9589,8 +9559,10 @@ var ui = { // Remove native controls ui.toggleNativeControls.call(this); - // Captions - captions.setup.call(this); + // Setup captions for HTML5 + if (this.isHTML5) { + captions.setup.call(this); + } // Reset volume this.volume = null; @@ -9643,6 +9615,12 @@ var ui = { if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) { ui.setPoster.call(this, this.poster); } + + // Manually set the duration if user has overridden it. + // The event listeners for it doesn't get called if preload is disabled (#701) + if (this.config.duration) { + controls.durationUpdate.call(this); + } }, @@ -12700,24 +12678,19 @@ var Plyr = function () { } // If the method is called without parameter, toggle based on current value - var show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active); - - // Nothing to change... - if (this.captions.active === show) { - return; - } - - // Set global - this.captions.active = show; + var active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active); // Toggle state - utils.toggleState(this.elements.buttons.captions, this.captions.active); + utils.toggleState(this.elements.buttons.captions, active); // Add class hook - utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active); + utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active); - // Trigger an event - utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); + // Update state and trigger event + if (active !== this.captions.active) { + this.captions.active = active; + utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); + } } /** @@ -13249,7 +13222,7 @@ var Plyr = function () { quality = Number(input); } - if (!utils.is.number(quality) || quality === 0) { + if (!utils.is.number(quality)) { quality = this.storage.get('quality'); } diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map index 13bf9960..9258a4cc 100644 --- a/dist/plyr.polyfilled.js.map +++ b/dist/plyr.polyfilled.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","navigator","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","userAgent","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","define","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","dispatchEvent","toggleState","pressed","getAttribute","state","args","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","reduce","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.6' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","define","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","dispatchEvent","toggleState","pressed","getAttribute","state","args","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","path","reduce","obj","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","toggleCaptions","userLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","setLanguage","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.language,\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Set toggled state\n this.toggleCaptions(active);\n\n // Watch changes to textTracks and update captions menu\n if (this.config.captions.update) {\n utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n update() {\n // Update tracks\n const tracks = captions.getTracks.call(this);\n this.options.captions = tracks.map(({language}) => language);\n\n // Set language if it hasn't been set already\n if (!this.language) {\n let { language } = this.config.captions;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n this.language = this.storage.get('language') || (language || '').toLowerCase();\n }\n\n // Toggle the class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js index 8f242b0f..f65f5c11 100644 --- a/dist/plyr.polyfilled.min.js +++ b/dist/plyr.polyfilled.min.js @@ -1,2 +1,2 @@ -"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},f=!s&&!a(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),h=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},d=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=h(t,!0),o(n),f)try{return d(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=s?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s="function"==typeof r;s&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(s&&(v(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,a,s,l,c=e&A.F,u=e&A.G,f=e&A.S,h=e&A.P,d=e&A.B,p=u?n:f?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=d&&a?T(s,n):h&&"function"==typeof s?T(Function.call,s):s,p&&k(p,o,s,e&A.U),g[o]!=s&&m(g,o,l),h&&y[o]!=s&&(y[o]=s)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),M=!(!n.ArrayBuffer||!n.DataView),L=M,O=0,N="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");O<9;)(_=n[N[O++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):L=!1;var j={ABV:M,CONSTR:L,TYPED:P,VIEW:x},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,U=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},B=Math.min,V=function(e){return e>0?B(U(e),9007199254740991):0},D=function(e){if(void 0===e)return 0;var t=U(e),n=V(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=U(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=Y(t),a=V(o.length),s=J(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},X=t(function(e){var t=n["__core-js_shared__"]||(n["__core-js_shared__"]={});(e.exports=function(e,n){return t[e]||(t[e]=void 0!==n?n:{})})("versions",[]).push({version:i.version,mode:"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})}),Z=X("keys"),ee=function(e){return Z[e]||(Z[e]=E(e))},te=$(!1),ne=ee("IE_PROTO"),ie=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ne&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~te(o,n)||o.push(n));return o},re="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),oe=re.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return ie(e,oe)}},se=function(e){return Object(G(e))},le=function(e){for(var t=se(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ce=t(function(e){var t=X("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),ue=p.f,fe=ce("toStringTag"),he=function(e,t,n){e&&!v(e=n?e:e.prototype,fe)&&ue(e,fe,{configurable:!0,value:t})},de=t(function(e,t){var i=ae.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,f=n.Math,h=n.RangeError,d=n.Infinity,g=c,y=f.abs,v=f.pow,b=f.floor,w=f.log,E=f.LN2,k=s?"_b":"buffer",S=s?"_l":"byteLength",T=s?"_o":"byteOffset";function A(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,f=0,h=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===d?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[f++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[f++]=255&i,i/=256,s-=8);return a[--f]|=128*h,a}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-d:d;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function M(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function O(e){return A(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=D(+n);if(r+t>e[S])throw h(l);var o=e[k]._b,a=r+e[T],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=D(+n);if(a+t>e[S])throw h(l);for(var s=e[k]._b,c=a+e[T],u=i(+r),f=0;f<t;f++)s[c+f]=u[o?f:t-f-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var B,H=(c=function(e){return F(this,c),new g(D(e))})[o]=g[o],W=i(g),z=0;W.length>z;)(B=W[z++])in c||m(c,B,g[B]);H.constructor=c}var G=new u(new c(2)),Y=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=D(e);this._b=le.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=U(t);if(r<0||r>i)throw h("Wrong offset!");if(r+(n=void 0===n?i-r:V(n))>i)throw h("Wrong length!");this[k]=e,this[T]=r,this[S]=n},s&&(N(c,"byteLength","_l"),N(u,"buffer","_b"),N(u,"byteLength","_l"),N(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,x,t,arguments[2])},setUint16:function(e,t){q(this,2,e,x,t,arguments[2])},setInt32:function(e,t){q(this,4,e,M,t,arguments[2])},setUint32:function(e,t){q(this,4,e,M,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,L,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),pe=ce("species"),ge=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[pe])?t:S(n)},me=ce("species"),ye=function(e){var t=n[e];s&&t&&!t[me]&&p.f(t,me,{configurable:!0,get:function(){return this}})},ve=n.ArrayBuffer,be=de.ArrayBuffer,we=de.DataView,Ee=j.ABV&&ve.isView,ke=be.prototype.slice,Se=j.VIEW;C(C.G+C.W+C.F*(ve!==be),{ArrayBuffer:be}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return Ee&&Ee(e)||r(e)&&Se in e}}),C(C.P+C.U+C.F*a(function(){return!new be(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==ke&&void 0===t)return ke.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(ge(this,be))(V(r-i)),s=new we(this),l=new we(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ye("ArrayBuffer");var Te=ce("toStringTag"),Ae="Arguments"==W(function(){return arguments}()),_e=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Te))?n:Ae?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Ce={},Pe=ce("iterator"),xe=Array.prototype,Me=function(e){return void 0!==e&&(Ce.Array===e||xe[Pe]===e)},Le=Object.keys||function(e){return ie(e,re)},Oe=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Le(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},Ne=n.document,je=Ne&&Ne.documentElement,Ie=ee("IE_PROTO"),Fe=function(){},Re=function(){var e,t=u("iframe"),n=re.length;for(t.style.display="none",je.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Re=e.F;n--;)delete Re.prototype[re[n]];return Re()},qe=Object.create||function(e,t){var n;return null!==e?(Fe.prototype=o(e),n=new Fe,Fe.prototype=null,n[Ie]=e):n=Re(),void 0===t?n:Oe(n,t)},Ue=ee("IE_PROTO"),Be=Object.prototype,Ve=Object.getPrototypeOf||function(e){return e=se(e),v(e,Ue)?e[Ue]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Be:null},De=ce("iterator"),He=i.getIteratorMethod=function(e){if(null!=e)return e[De]||e["@@iterator"]||Ce[_e(e)]},We=Array.isArray||function(e){return"Array"==W(e)},ze=ce("species"),Ge=function(e,t){return new(function(e){var t;return We(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!We(t.prototype)||(t=void 0),r(t)&&null===(t=t[ze])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ye=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ge;return function(t,c,u){for(var f,h,d=se(t),p=z(d),g=T(c,u,3),m=V(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((s||y in p)&&(h=g(f=p[y],y,d),e))if(n)v[y]=h;else if(h)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:v.push(f)}else if(o)return!1;return a?-1:r||o?o:v}},Ke=ce("unscopables"),Qe=Array.prototype;null==Qe[Ke]&&m(Qe,Ke,{});var Je=function(e){Qe[Ke][e]=!0},$e=function(e,t){return{value:t,done:!!e}},Xe={};m(Xe,ce("iterator"),function(){return this});var Ze=function(e,t,n){e.prototype=qe(Xe,{next:g(1,n)}),he(e,t+" Iterator")},et=ce("iterator"),tt=!([].keys&&"next"in[].keys()),nt=function(){return this},it=function(e,t,n,i,r,o,a){Ze(n,t,i);var s,l,c,u=function(e){if(!tt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",h="values"==r,d=!1,p=e.prototype,g=p[et]||p["@@iterator"]||r&&p[r],y=g||u(r),v=r?h?u("entries"):y:void 0,b="Array"==t&&p.entries||g;if(b&&(c=Ve(b.call(new e)))!==Object.prototype&&c.next&&(he(c,f,!0),"function"!=typeof c[et]&&m(c,et,nt)),h&&g&&"values"!==g.name&&(d=!0,y=function(){return g.call(this)}),(tt||d||!p[et])&&m(p,et,y),Ce[t]=y,Ce[f]=nt,r)if(s={values:h?y:u("values"),keys:o?y:u("keys"),entries:v},a)for(l in s)l in p||k(p,l,s[l]);else C(C.P+C.F*(tt||d),t,s);return s},rt=it(Array,"Array",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$e(1)):$e(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Ce.Arguments=Ce.Array,Je("keys"),Je("values"),Je("entries");var ot=ce("iterator"),at=!1;try{[7][ot]().return=function(){at=!0}}catch(e){}var st=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[ot]();r.next=function(){return{done:n=!0}},i[ot]=function(){return r},e(i)}catch(e){}return n},lt=[].copyWithin||function(e,t){var n=se(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ct={f:{}.propertyIsEnumerable},ut=Object.getOwnPropertyDescriptor,ft={f:s?ut:function(e,t){if(e=Y(e),t=h(t,!0),f)try{return ut(e,t)}catch(e){}if(v(e,t))return g(!ct.f.call(e,t),e[t])}},ht=t(function(e){if(s){var t=n,i=a,o=C,l=j,c=de,u=T,f=F,d=g,y=m,b=I,w=U,k=V,S=D,A=J,_=h,P=v,x=_e,M=r,L=se,O=Me,N=qe,R=Ve,q=ae.f,B=He,H=E,W=ce,z=Ye,G=$,Y=ge,K=rt,Q=Ce,X=st,Z=ye,ee=le,te=lt,ne=p,ie=ft,re=ne.f,oe=ie.f,ue=t.RangeError,fe=t.TypeError,he=t.Uint8Array,pe=Array.prototype,me=c.ArrayBuffer,ve=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Se=z(5),Te=z(6),Ae=G(!0),Pe=G(!1),xe=K.values,Le=K.keys,Oe=K.entries,Ne=pe.lastIndexOf,je=pe.reduce,Ie=pe.reduceRight,Fe=pe.join,Re=pe.sort,Ue=pe.slice,Be=pe.toString,De=pe.toLocaleString,We=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ke=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ke]),t)}),Ze=i(function(){return 1===new he(new Uint16Array([1]).buffer)[0]}),et=!!he&&!!he.prototype.set&&i(function(){new he(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ue("Wrong offset!");return n},nt=function(e){if(M(e)&&Je in e)return e;throw fe(e+" is not a typed array!")},it=function(e,t){if(!(M(e)&&Ge in e))throw fe("It is not a typed array constructor!");return new e(t)},ot=function(e,t){return at(Y(e,e[Ke]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},ct=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,f=void 0!==c,h=B(s);if(null!=h&&!O(h)){for(a=h.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(f&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(s.length),r=it(this,n);n>t;t++)r[t]=f?c(s[t],t):s[t];return r},ht=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},dt=!!he&&i(function(){De.call(new he(1))}),pt=function(){return De.apply(dt?Ue.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return ot(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return Pe(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ke]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return ot(this,Ue.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),o=0;if(r+t>n)throw ue("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return Le.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return M(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?d(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&M(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Be.call({})})&&(Be=De=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,We,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Be,toLocaleString:pt}),ct(kt,"buffer","b"),ct(kt,"byteOffset","o"),ct(kt,"byteLength","l"),ct(kt,"length","e"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?"Clamped":"")+"Array",c="get"+e,u="set"+e,h=t[s],d=h||{},p=h&&R(h),g=!h||!l.ABV,m={},v=h&&h.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(h=r(function(e,t,i,r){f(e,h,s,"_d");var o,a,l,c,u=0,d=0;if(M(t)){if(!(t instanceof me||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?at(h,t):ut.call(h,t);o=t,d=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ue("Wrong length!");if((a=p-d)<0)throw ue("Wrong length!")}else if((a=k(r)*n)+d>p)throw ue("Wrong length!");l=a/n}else l=S(t),o=new me(a=l*n);for(y(e,"_d",{b:o,o:d,l:a,e:l,v:new ve(o)});u<l;)b(e,u++)}),v=h.prototype=N(kt),y(v,"constructor",h)):i(function(){h(1)})&&i(function(){new h(-1)})&&X(function(e){new h,new h(null),new h(1.5),new h(e)},!0)||(h=r(function(e,t,i,r){var o;return f(e,h,s),M(t)?t instanceof me||"ArrayBuffer"==(o=x(t))||"SharedArrayBuffer"==o?void 0!==r?new d(t,tt(i,n),r):void 0!==i?new d(t,tt(i,n)):new d(t):Je in t?at(h,t):ut.call(h,t):new d(S(t))}),be(p!==Function.prototype?q(d).concat(q(p)):q(d),function(e){e in h||y(h,e,d[e])}),h.prototype=v,v.constructor=h);var w=v[We],E=!!w&&("values"==w.name||null==w.name),T=vt.values;y(h,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ke,h),(a?new h(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),m[s]=h,o(o.G+o.W+o.F*(h!=d),m),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){d.of.call(h,1)}),s,{from:ut,of:ht}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,s,gt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!E,s,vt),v.toString!=Be&&(v.toString=Be),o(o.P+o.F*i(function(){new h(1).slice()}),s,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=E?w:T,E||y(v,We,T)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var dt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},pt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,f,h=s?function(){return e}:He(e),d=T(r,a,i?2:1),p=0;if("function"!=typeof h)throw TypeError(e+" is not iterable!");if(Me(h)){for(l=V(e.length);l>p;p++)if((f=i?d(o(c=e[p])[0],c[1]):d(e[p]))===t||f===n)return f}else for(u=h.call(e);!(c=u.next()).done;)if((f=dt(u,d,c.value,i))===t||f===n)return f};i.BREAK=t,i.RETURN=n}),gt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),mt=(gt.KEY,gt.NEED,gt.fastKey,gt.getWeak,gt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),yt=p.f,vt=gt.fastKey,bt=s?"_s":"size",wt=function(e,t){var n,i=vt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},Et={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=qe(null),e._f=void 0,e._l=void 0,e[bt]=0,null!=o&&pt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=mt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[bt]=0},delete:function(e){var n=mt(this,t),i=wt(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[bt]--}return!!i},forEach:function(e){mt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!wt(mt(this,t),e)}}),s&&yt(r.prototype,"size",{get:function(){return mt(this,t)[bt]}}),r},def:function(e,t,n){var i,r,o=wt(e,t);return o?o.v=n:(e._l=o={i:r=vt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[bt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:wt,setStrong:function(e,t,n){it(e,t,function(e,n){this._t=mt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?$e(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,$e(1))},n?"entries":"values",!n,!0),ye(t)}},kt=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},St={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,ft.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return kt(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:kt},Tt=St.set,At=function(e,t,i,o,s,l){var c=n[e],u=c,f=s?"set":"add",h=u&&u.prototype,d={},p=function(e){var t=h[e];k(h,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||h.forEach&&!a(function(){(new u).entries().next()}))){var g=new u,m=g[f](l?{}:-0,1)!=g,y=a(function(){g.has(1)}),v=st(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[f](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&Tt&&Tt(e,i),e}(new c,t,u);return null!=n&&pt(n,s,i[f],i),i})).prototype=h,h.constructor=u),(y||b)&&(p("delete"),p("has"),s&&p("get")),(b||m)&&p(f),l&&h.clear&&delete h.clear}else u=o.getConstructor(t,e,s,f),I(u.prototype,i),gt.NEED=!0;return he(u,e),d[e]=u,C(C.G+C.W+C.F*(u!=c),d),l||o.setStrong(u,e,s),u},_t=(At("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Et.getEntry(mt(this,"Map"),e);return t&&t.v},set:function(e,t){return Et.def(mt(this,"Map"),0===e?0:e,t)}},Et,!0),At("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Et.def(mt(this,"Set"),e=0===e?0:e,e)}},Et),{f:Object.getOwnPropertySymbols}),Ct=Object.assign,Pt=!Ct||a(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Ct({},e)[n]||Object.keys(Ct({},t)).join("")!=i})?function(e,t){for(var n=se(e),i=arguments.length,r=1,o=_t.f,a=ct.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Le(l).concat(o(l)):Le(l),u=c.length,f=0;u>f;)a.call(l,s=c[f++])&&(n[s]=l[s]);return n}:Ct,xt=gt.getWeak,Mt=Ye(5),Lt=Ye(6),Ot=0,Nt=function(e){return e._l||(e._l=new jt)},jt=function(){this.a=[]},It=function(e,t){return Mt(e.a,function(e){return e[0]===t})};jt.prototype={get:function(e){var t=It(this,e);if(t)return t[1]},has:function(e){return!!It(this,e)},set:function(e,t){var n=It(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Lt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Ft={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,null!=r&&pt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?Nt(mt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?Nt(mt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=xt(o(t),!0);return!0===i?Nt(e).set(t,n):i[e._i]=n,e},ufstore:Nt};t(function(e){var t,n=Ye(0),i=gt.getWeak,o=Object.isExtensible,s=Ft.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(mt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Ft.def(mt(this,"WeakMap"),e,t)}},f=e.exports=At("WeakMap",c,u,Ft,!0,!0);a(function(){return 7!=(new f).set((Object.freeze||Object)(l),7).get(l)})&&(t=Ft.getConstructor(c,"WeakMap"),Pt(t.prototype,u),gt.NEED=!0,n(["delete","has","get","set"],function(e){var n=f.prototype,i=n[e];k(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return"set"==e?this:s}return i.call(this,n,a)})}))});At("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Ft.def(mt(this,"WeakSet"),e,!0)}},Ft,!1,!0);var Rt=(n.Reflect||{}).apply,qt=Function.apply;C(C.S+C.F*!a(function(){Rt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return Rt?Rt(i,t,r):qt.call(i,t,r)}});var Ut=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Bt=[].slice,Vt={},Dt=Function.bind||function(e){var t=S(this),n=Bt.call(arguments,1),i=function(){var r=n.concat(Bt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Vt)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Vt[t]=Function("F,a","return new F("+i.join(",")+")")}return Vt[t](e,n)}(t,r.length,r):Ut(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Ht=(n.Reflect||{}).construct,Wt=a(function(){function e(){}return!(Ht(function(){},[],e)instanceof e)}),zt=!a(function(){Ht(function(){})});C(C.S+C.F*(Wt||zt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(zt&&!Wt)return Ht(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Dt.apply(e,i))}var a=n.prototype,s=qe(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),C(C.S+C.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=h(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Gt=ft.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Gt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=ft.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=Ve(t))?e(a,n,s):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ft.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Ve(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Yt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Yt||Yt(e)}});var Kt=n.Reflect,Qt=Kt&&Kt.ownKeys||function(e){var t=ae.f(o(e)),n=_t.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Qt});var Jt=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return Jt&&Jt(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=ft.f(o(t),n);if(!c){if(r(s=Ve(t)))return e(s,n,i,l);c=g(0)}if(v(c,"value")){if(!1===c.writable||!r(l))return!1;if(a=ft.f(l,n)){if(a.get||a.set||!1===a.writable)return!1;a.value=i,p.f(l,n,a)}else p.f(l,n,g(0,i));return!0}return void 0!==c.set&&(c.set.call(l,i),!0)}}),St&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){St.check(e,t);try{return St.set(e,t),!0}catch(e){return!1}}});var $t,Xt,Zt,en=n.process,tn=n.setImmediate,nn=n.clearImmediate,rn=n.MessageChannel,on=n.Dispatch,an=0,sn={},ln=function(){var e=+this;if(sn.hasOwnProperty(e)){var t=sn[e];delete sn[e],t()}},cn=function(e){ln.call(e.data)};tn&&nn||(tn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return sn[++an]=function(){Ut("function"==typeof e?e:Function(e),t)},$t(an),an},nn=function(e){delete sn[e]},"process"==W(en)?$t=function(e){en.nextTick(T(ln,e,1))}:on&&on.now?$t=function(e){on.now(T(ln,e,1))}:rn?(Zt=(Xt=new rn).port2,Xt.port1.onmessage=cn,$t=T(Zt.postMessage,Zt,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?($t=function(e){n.postMessage(e+"","*")},n.addEventListener("message",cn,!1)):$t="onreadystatechange"in u("script")?function(e){je.appendChild(u("script")).onreadystatechange=function(){je.removeChild(this),ln.call(e)}}:function(e){setTimeout(T(ln,e,1),0)});var un={set:tn,clear:nn},fn=un.set,hn=n.MutationObserver||n.WebKitMutationObserver,dn=n.process,pn=n.Promise,gn="process"==W(dn);function mn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}var yn,vn,bn,wn,En={f:function(e){return new mn(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=n.navigator,Tn=Sn&&Sn.userAgent||"",An=un.set,_n=function(){var e,t,i,r=function(){var n,r;for(gn&&(n=dn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(gn)i=function(){dn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(pn&&pn.resolve){var o=pn.resolve(void 0);i=function(){o.then(r)}}else i=function(){fn.call(n,r)};else{var a=!0,s=document.createTextNode("");new hn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),Cn=n.TypeError,Pn=n.process,xn=Pn&&Pn.versions,Mn=xn&&xn.v8||"",Ln=n.Promise,On="process"==_e(Pn),Nn=function(){},jn=vn=En.f,In=!!function(){try{var e=Ln.resolve(1),t=(e.constructor={})[ce("species")]=function(e){e(Nn,Nn)};return(On||"function"==typeof PromiseRejectionEvent)&&e.then(Nn)instanceof t&&0!==Mn.indexOf("6.6")&&-1===Tn.indexOf("Chrome/66")}catch(e){}}(),Fn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},Rn=function(e,t){if(!e._n){e._n=!0;var n=e._c;_n(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a,s=r?t.ok:t.fail,l=t.resolve,c=t.reject,u=t.domain;try{s?(r||(2==e._h&&Bn(e),e._h=1),!0===s?n=i:(u&&u.enter(),n=s(i),u&&(u.exit(),a=!0)),n===t.promise?c(Cn("Promise-chain cycle")):(o=Fn(n))?o.call(n,l,c):l(n)):c(i)}catch(e){u&&!a&&u.exit(),c(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&qn(e)})}},qn=function(e){An.call(n,function(){var t,i,r,o=e._v,a=Un(e);if(a&&(t=kn(function(){On?Pn.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=On||Un(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Un=function(e){return 1!==e._h&&0===(e._a||e._c).length},Bn=function(e){An.call(n,function(){var t;On?Pn.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Vn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Rn(t,!0))},Dn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Cn("Promise can't be resolved itself");(t=Fn(e))?_n(function(){var i={_w:n,_d:!1};try{t.call(e,T(Dn,i,1),T(Vn,i,1))}catch(e){Vn.call(i,e)}}):(n._v=e,n._s=1,Rn(n,!1))}catch(e){Vn.call({_w:n,_d:!1},e)}}};In||(Ln=function(e){F(this,Ln,"Promise","_h"),S(e),yn.call(this);try{e(T(Dn,this,1),T(Vn,this,1))}catch(e){Vn.call(this,e)}},(yn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Ln.prototype,{then:function(e,t){var n=jn(ge(this,Ln));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=On?Pn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&Rn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new yn;this.promise=e,this.resolve=T(Dn,e,1),this.reject=T(Vn,e,1)},En.f=jn=function(e){return e===Ln||e===wn?new bn(e):vn(e)}),C(C.G+C.W+C.F*!In,{Promise:Ln}),he(Ln,"Promise"),ye("Promise"),wn=i.Promise,C(C.S+C.F*!In,"Promise",{reject:function(e){var t=jn(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!In,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(In&&st(function(e){Ln.all(e).catch(Nn)})),"Promise",{all:function(e){var t=this,n=jn(t),i=n.resolve,r=n.reject,o=kn(function(){var n=[],o=0,a=1;pt(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=jn(t),i=n.reject,r=kn(function(){pt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Hn={f:ce},Wn=p.f,zn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Wn(t,e,{value:Hn.f(e)})},Gn=ae.f,Yn={}.toString,Kn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Qn={f:function(e){return Kn&&"[object Window]"==Yn.call(e)?function(e){try{return Gn(e)}catch(e){return Kn.slice()}}(e):Gn(Y(e))}},Jn=gt.KEY,$n=ft.f,Xn=p.f,Zn=Qn.f,ei=n.Symbol,ti=n.JSON,ni=ti&&ti.stringify,ii=ce("_hidden"),ri=ce("toPrimitive"),oi={}.propertyIsEnumerable,ai=X("symbol-registry"),si=X("symbols"),li=X("op-symbols"),ci=Object.prototype,ui="function"==typeof ei,fi=n.QObject,hi=!fi||!fi.prototype||!fi.prototype.findChild,di=s&&a(function(){return 7!=qe(Xn({},"a",{get:function(){return Xn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=$n(ci,t);i&&delete ci[t],Xn(e,t,n),i&&e!==ci&&Xn(ci,t,i)}:Xn,pi=function(e){var t=si[e]=qe(ei.prototype);return t._k=e,t},gi=ui&&"symbol"==typeof ei.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof ei},mi=function(e,t,n){return e===ci&&mi(li,t,n),o(e),t=h(t,!0),o(n),v(si,t)?(n.enumerable?(v(e,ii)&&e[ii][t]&&(e[ii][t]=!1),n=qe(n,{enumerable:g(0,!1)})):(v(e,ii)||Xn(e,ii,g(1,{})),e[ii][t]=!0),di(e,t,n)):Xn(e,t,n)},yi=function(e,t){o(e);for(var n,i=function(e){var t=Le(e),n=_t.f;if(n)for(var i,r=n(e),o=ct.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=Y(t)),r=0,a=i.length;a>r;)mi(e,n=i[r++],t[n]);return e},vi=function(e){var t=oi.call(this,e=h(e,!0));return!(this===ci&&v(si,e)&&!v(li,e))&&(!(t||!v(this,e)||!v(si,e)||v(this,ii)&&this[ii][e])||t)},bi=function(e,t){if(e=Y(e),t=h(t,!0),e!==ci||!v(si,t)||v(li,t)){var n=$n(e,t);return!n||!v(si,t)||v(e,ii)&&e[ii][t]||(n.enumerable=!0),n}},wi=function(e){for(var t,n=Zn(Y(e)),i=[],r=0;n.length>r;)v(si,t=n[r++])||t==ii||t==Jn||i.push(t);return i},Ei=function(e){for(var t,n=e===ci,i=Zn(n?li:Y(e)),r=[],o=0;i.length>o;)!v(si,t=i[o++])||n&&!v(ci,t)||r.push(si[t]);return r};ui||(k((ei=function(){if(this instanceof ei)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===ci&&t.call(li,n),v(this,ii)&&v(this[ii],e)&&(this[ii][e]=!1),di(this,e,g(1,n))};return s&&hi&&di(ci,e,{configurable:!0,set:t}),pi(e)}).prototype,"toString",function(){return this._k}),ft.f=bi,p.f=mi,ae.f=Qn.f=wi,ct.f=vi,_t.f=Ei,s&&k(ci,"propertyIsEnumerable",vi,!0),Hn.f=function(e){return pi(ce(e))}),C(C.G+C.W+C.F*!ui,{Symbol:ei});for(var ki="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),Si=0;ki.length>Si;)ce(ki[Si++]);for(var Ti=Le(ce.store),Ai=0;Ti.length>Ai;)zn(Ti[Ai++]);C(C.S+C.F*!ui,"Symbol",{for:function(e){return v(ai,e+="")?ai[e]:ai[e]=ei(e)},keyFor:function(e){if(!gi(e))throw TypeError(e+" is not a symbol!");for(var t in ai)if(ai[t]===e)return t},useSetter:function(){hi=!0},useSimple:function(){hi=!1}}),C(C.S+C.F*!ui,"Object",{create:function(e,t){return void 0===t?qe(e):yi(qe(e),t)},defineProperty:mi,defineProperties:yi,getOwnPropertyDescriptor:bi,getOwnPropertyNames:wi,getOwnPropertySymbols:Ei}),ti&&C(C.S+C.F*(!ui||a(function(){var e=ei();return"[null]"!=ni([e])||"{}"!=ni({a:e})||"{}"!=ni(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!gi(e))return We(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!gi(t))return t}),i[1]=t,ni.apply(ti,i)}}),ei.prototype[ri]||m(ei.prototype,ri,ei.prototype.valueOf),he(ei,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var _i=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*a(function(){n(1)}),"Object",r)},Ci=gt.onFreeze;_i("freeze",function(e){return function(t){return e&&r(t)?e(Ci(t)):t}});var Pi=gt.onFreeze;_i("seal",function(e){return function(t){return e&&r(t)?e(Pi(t)):t}});var xi=gt.onFreeze;_i("preventExtensions",function(e){return function(t){return e&&r(t)?e(xi(t)):t}}),_i("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),_i("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),_i("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Mi=ft.f;_i("getOwnPropertyDescriptor",function(){return function(e,t){return Mi(Y(e),t)}}),_i("getPrototypeOf",function(){return function(e){return Ve(se(e))}}),_i("keys",function(){return function(e){return Le(se(e))}}),_i("getOwnPropertyNames",function(){return Qn.f}),C(C.S+C.F,"Object",{assign:Pt});var Li=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Li});var Oi=p.f,Ni=Function.prototype,ji=/^\s*function ([^ (]*)/;"name"in Ni||s&&Oi(Ni,"name",{configurable:!0,get:function(){try{return(""+this).match(ji)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Ii=String.fromCharCode,Fi=String.fromCodePoint;C(C.S+C.F*(!!Fi&&1!=Fi.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Ii(t):Ii(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Ri,qi=(Ri=!1,function(e,t){var n,i,r=String(G(e)),o=U(t),a=r.length;return o<0||o>=a?Ri?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?Ri?r.charAt(o):n:Ri?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return qi(this,e)}});var Ui=function(e){var t=String(G(this)),n="",i=U(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Ui});var Bi=ce("match"),Vi=function(e){var t;return r(e)&&(void 0!==(t=e[Bi])?!!t:"RegExp"==W(e))},Di=function(e,t,n){if(Vi(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Hi=ce("match"),Wi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Hi]=!1,!"/./"[e](t)}catch(e){}}return!0},zi="".startsWith;C(C.P+C.F*Wi("startsWith"),"String",{startsWith:function(e){var t=Di(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return zi?zi.call(t,i,n):t.slice(n,n+i.length)===i}});var Gi="".endsWith;C(C.P+C.F*Wi("endsWith"),"String",{endsWith:function(e){var t=Di(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Gi?Gi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Wi("includes"),"String",{includes:function(e){return!!~Di(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Yi=function(e,t,n){var i=ce(e),r=n(G,i,""[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Yi("match",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Yi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Yi("split",2,function(e,t,n){var i=Vi,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var a=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var s,l,c,u,f,h=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,d+"g");for(a||(s=new RegExp("^"+m.source+"$(?!\\s)",d));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(h.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(l[f]=void 0)}),l.length>1&&l.index<n.length&&o.apply(h,l.slice(1)),u=l[0].length,p=c,h.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||h.push(""):h.push(n.slice(p)),h.length>g?h.slice(0,g):h}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Yi("search",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Ki=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!st(function(e){}),"Array",{from:function(e){var t,n,i,r,o=se(e),a="function"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,f=He(o);if(c&&(l=T(l,s>2?arguments[2]:void 0,2)),null==f||a==Array&&Me(f))for(n=new a(t=V(o.length));t>u;u++)Ki(n,u,c?l(o[u],u):o[u]);else for(r=f.call(o),n=new a;!(i=r.next()).done;u++)Ki(n,u,c?dt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Ki(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:lt}),Je("copyWithin");var Qi=Ye(5),Ji=!0;"find"in[]&&Array(1).find(function(){Ji=!1}),C(C.P+C.F*Ji,"Array",{find:function(e){return Qi(this,e,arguments.length>1?arguments[1]:void 0)}}),Je("find");var $i=Ye(6),Xi=!0;"findIndex"in[]&&Array(1).findIndex(function(){Xi=!1}),C(C.P+C.F*Xi,"Array",{findIndex:function(e){return $i(this,e,arguments.length>1?arguments[1]:void 0)}}),Je("findIndex"),C(C.P,"Array",{fill:le}),Je("fill");var Zi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Zi(e)}});var er=Math.floor,tr=function(e){return!r(e)&&isFinite(e)&&er(e)===e};C(C.S,"Number",{isInteger:tr});var nr=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return tr(e)&&nr(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var ir=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},rr=Math.sqrt,or=Math.acosh;C(C.S+C.F*!(or&&710==Math.floor(or(Number.MAX_VALUE))&&or(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:ir(e-1+rr(e-1)*rr(e+1))}});var ar=Math.asinh;C(C.S+C.F*!(ar&&1/ar(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var sr=Math.atanh;C(C.S+C.F*!(sr&&1/sr(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var lr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return lr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var cr=Math.exp;C(C.S,"Math",{cosh:function(e){return(cr(e=+e)+cr(-e))/2}});var ur=Math.expm1,fr=!ur||ur(10)>22025.465794806718||ur(10)<22025.465794806718||-2e-17!=ur(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:ur;C(C.S+C.F*(fr!=Math.expm1),"Math",{expm1:fr});var hr=Math.pow,dr=hr(2,-52),pr=hr(2,-23),gr=hr(2,127)*(2-pr),mr=hr(2,-126),yr=Math.fround||function(e){var t,n,i=Math.abs(e),r=lr(e);return i<mr?r*(i/mr/pr+1/dr-1/dr)*mr*pr:(n=(t=(1+pr/dr)*i)-(t-i))>gr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:yr});var vr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=vr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var br=Math.imul;C(C.S+C.F*a(function(){return-5!=br(4294967295,5)||2!=br.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:ir}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:lr});var wr=Math.exp;C(C.S+C.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(fr(e)-fr(-e))/2:(wr(e-1)-wr(-e-1))*(Math.E/2)}});var Er=Math.exp;C(C.S,"Math",{tanh:function(e){var t=fr(e=+e),n=fr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(Er(e)+Er(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var kr=$(!0);C(C.P,"Array",{includes:function(e){return kr(this,e,arguments.length>1?arguments[1]:void 0)}}),Je("includes");var Sr=ct.f,Tr=function(e){return function(t){for(var n,i=Y(t),r=Le(i),o=r.length,a=0,s=[];o>a;)Sr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},Ar=Tr(!1);C(C.S,"Object",{values:function(e){return Ar(e)}});var _r=Tr(!0);C(C.S,"Object",{entries:function(e){return _r(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=ft.f,o=Qt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&Ki(a,t,n);return a}});var Cr=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?" ":String(n),s=V(t);if(s<=o||""==a)return r;var l=s-o,c=Ui.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c};C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Tn),"String",{padStart:function(e){return Cr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Tn),"String",{padEnd:function(e){return Cr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Pr=[].slice,xr=/MSIE .\./.test(Tn),Mr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Pr.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*xr,{setTimeout:Mr(n.setTimeout),setInterval:Mr(n.setInterval)}),C(C.G+C.B,{setImmediate:un.set,clearImmediate:un.clear});for(var Lr=ce("iterator"),Or=ce("toStringTag"),Nr=Ce.Array,jr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Ir=Le(jr),Fr=0;Fr<Ir.length;Fr++){var Rr,qr=Ir[Fr],Ur=jr[qr],Br=n[qr],Vr=Br&&Br.prototype;if(Vr&&(Vr[Lr]||m(Vr,Lr,Nr),Vr[Or]||m(Vr,Or,qr),Ce[qr]=Nr,Ur))for(Rr in rt)Vr[Rr]||k(Vr,Rr,rt[Rr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",f="suspendedYield",h="executing",d="completed",p={},g={};g[a]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(M([])));y&&y!==i&&r.call(y,a)&&(g=y);var v=S.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[s]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=M,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type="throw",s.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:M(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),a=new x(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===h)throw new Error("Generator is already running");if(i===d){if("throw"===r)throw o;return L()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=_(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=h;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?d:f,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=d,n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,a){var s=w(t[e],t,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Dr=new window.CustomEvent("test");if(Dr.preventDefault(),!0!==Dr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Hr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Hr.prototype=window.Event.prototype,window.CustomEvent=Hr}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},r=function(e){return decodeURIComponent(e).replace(/\+/g," ")};"URLSearchParams"in e&&"a=1"===new URLSearchParams("?a=1").toString()||function(){var o=function(e){if(Object.defineProperty(this,"_entries",{value:{}}),"string"==typeof e){if(""!==e)for(var t,n=(e=e.replace(/^\?/,"")).split("&"),i=0;i<n.length;i++)t=n[i].split("="),this.append(r(t[0]),t.length>1?r(t[1]):"")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e="";return this.forEach(function(t,n){e.length>0&&(e+="&"),e+=i(n)+"="+i(t)}),e},e.URLSearchParams=o}()}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e),function(e){if(function(){try{var e=new URL("b","http://a");return e.pathname="c%20d","http://a/c%20d"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(e,t){"string"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument("");if(window.doc=n,t){var i=n.createElement("base");i.href=t,n.head.appendChild(i)}var r=n.createElement("a");if(r.href=e,n.body.appendChild(r),r.href=r.href,":"===r.protocol||!/:/.test(r.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:r})},i=n.prototype;["hash","host","hostname","port","protocol","search"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return["append","delete","set"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),e},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e);var Wr,zr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,f=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=h:((s=l.createElement("script")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==f(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw"LoadJS";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s},e.exports=n()}),Gr=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Yr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Kr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Qr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Jr=function(){function e(t){Gr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Yr(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(Zr.is.empty(n))return null;var i=JSON.parse(n);return Zr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Zr.is.object(t)){var n=this.get();Zr.is.empty(n)&&(n={}),Zr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),$r={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Xr={audio:"audio",video:"video"},Zr={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})},loadScript:function(e){return new Promise(function(t,n){zr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Zr.is.string(e)){var n=Zr.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=Jr.supported,o=document.createElement("div");if(Zr.toggleHidden(o,!0),n&&o.setAttribute("id",t),r){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var s=JSON.parse(a);return void l.call(o,s.content)}}Zr.fetch(e).then(function(e){Zr.is.empty(e)||(r&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),l.call(o,e))}).catch(function(){})}}function l(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Zr.is.object(t)&&Zr.setAttributes(i,t),Zr.is.string(n)&&(i.innerText=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Zr.createElement(e,n,i))},removeElement:function(e){Zr.is.nodeList(e)||Zr.is.array(e)?Array.from(e).forEach(Zr.removeElement):Zr.is.element(e)&&Zr.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Zr.is.element(t)&&Zr.is.element(t.parentNode)&&Zr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Zr.is.element(e)&&!Zr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Qr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Zr.is.string(e)||Zr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Zr.is.object(i)&&Zr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n},toggleHidden:function(e,t){if(Zr.is.element(e)){var n=t;Zr.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if(Zr.is.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return null},hasClass:function(e,t){return Zr.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Zr.is.element(e)){var n=Zr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Zr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Zr.on(this.elements.container,"keydown",o,!1):Zr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Zr.is.empty(e)&&!Zr.is.empty(t)&&Zr.is.function(n))if(Zr.is.nodeList(e)||Zr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Zr.toggleListener.call(null,e,t,n,i,r,o)});else{var a=t.split(" "),s=o;eo.passiveListeners&&(s={passive:r,capture:o}),a.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,s)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(Zr.is.element(e)&&!Zr.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Zr.is.array(e)||Zr.is.nodeList(e))Array.from(e).forEach(function(e){return Zr.toggleState(e,t)});else if(Zr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Zr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return Zr.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return Zr.is.string(n[t])?n[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Zr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),a=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(a)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Zr.replaceAll(e,"-"," "),e=Zr.replaceAll(e,"_"," "),e=Zr.toTitleCase(e),Zr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Zr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Zr.is.object(r)?(Object.keys(r).forEach(function(t){Zr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Kr({},t,{})),Zr.extend(e[t],r[t])):Object.assign(e,Kr({},t,r[t]))}),Zr.extend.apply(Zr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return Zr.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},closest:function(e,t){return Zr.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?$r.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?$r.vimeo:null},parseYouTubeId:function(e){if(Zr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Zr.is.empty(e))return null;if(Zr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Qr(n,2),r=i[0],o=i[1];return Object.assign(e,Kr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Zr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Zr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Zr.toggleHidden(e,!0),e.offsetHeight,Zr.toggleHidden(e,!1)},0)}},eo={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Zr.getBrowser(),a=o.isIPhone&&n&&eo.playsinline;switch(t+":"+e){case"html5:video":r=(i=eo.video)&&eo.rangeInput&&(!o.isIPhone||a);break;case"html5:audio":r=(i=eo.audio)&&eo.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=eo.rangeInput&&(!o.isIPhone||a);break;default:r=(i=eo.audio&&eo.video)&&eo.rangeInput}return{api:i,ui:r}},pip:!Zr.getBrowser().isIPhone&&Zr.is.function(Zr.createElement("video").webkitSetPresentationMode),airplay:Zr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Zr.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Wr=document.createElement("input"),Wr.type="range","range"===Wr.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Zr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},to={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=to.getSources.call(this);if(Zr.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!Zr.is.empty(e.getAttribute("size"))});return Zr.is.empty(t)?null:Zr.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=to.getSources.call(e);if(Zr.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return Zr.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=to.getSources.call(e);if(!Zr.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!Zr.is.empty(i)){var r=i.filter(function(t){return eo.mime.call(e,t.getAttribute("type"))});if(!Zr.is.empty(r)){Zr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,a=e.playing;e.media.src=r[0].getAttribute("src"),e.media.load(),a&&e.play(),e.currentTime=o,Zr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(Zr.removeElement(to.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},no=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Zr.is.empty(e)||Zr.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Qr(e,2),i=t[0],r=t[1];n=Zr.replaceAll(n,i,r)}),n},io=Zr.getBrowser(),ro={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||io.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=Zr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Zr.getElements.call(this,this.config.selectors.buttons.play),pause:Zr.getElement.call(this,this.config.selectors.buttons.pause),restart:Zr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Zr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Zr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Zr.getElement.call(this,this.config.selectors.buttons.mute),pip:Zr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Zr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Zr.getElement.call(this,this.config.selectors.buttons.settings),captions:Zr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Zr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Zr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Zr.getElement.call(this,this.config.selectors.inputs.seek),volume:Zr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Zr.getElement.call(this,this.config.selectors.display.buffer),currentTime:Zr.getElement.call(this,this.config.selectors.display.currentTime),duration:Zr.getElement.call(this,this.config.selectors.display.duration)},Zr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=ro.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Zr.setAttributes(r,Zr.extend(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",a):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),r.appendChild(o),r},createLabel:function(e,t){var n=no(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Zr.createElement("span",i,n)},createBadge:function(e){if(Zr.is.empty(e))return null;var t=Zr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Zr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Zr.createElement("button"),i=Object.assign({},t),r=Zr.toCamelCase(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,a="play",l="pause",s="play",c="pause";break;case"mute":o=!0,a="mute",l="unmute",s="volume",c="muted";break;case"captions":o=!0,a="enableCaptions",l="disableCaptions",s="captions-off",c="captions-on";break;case"fullscreen":o=!0,a="enterFullscreen",l="exitFullscreen",s="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",a="play",s="play";break;default:a=r,s=e}return o?(n.appendChild(ro.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(ro.createIcon.call(this,s,{class:"icon--not-pressed"})),n.appendChild(ro.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(ro.createLabel.call(this,a,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(ro.createIcon.call(this,s)),n.appendChild(ro.createLabel.call(this,a))),Zr.extend(i,Zr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Zr.setAttributes(n,i),"play"===r?(Zr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Zr.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},no(e,this.config)),i=Zr.createElement("input",Zr.extend(Zr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,ro.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Zr.createElement("progress",Zr.extend(Zr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(Zr.createElement("span",null,"0"));var i="";switch(e){case"played":i=no("played",this.config);break;case"buffer":i=no("buffered",this.config)}n.innerText="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Zr.getAttributesFromSelector(this.config.selectors.display[e]),n=Zr.createElement("div",Zr.extend(t,{class:"plyr__time "+t.class,"aria-label":no(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],a=Zr.createElement("li"),s=Zr.createElement("label",{class:this.config.classNames.control}),l=Zr.createElement("input",Zr.extend(Zr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Zr.createElement("span",{hidden:""});s.appendChild(l),s.appendChild(c),s.insertAdjacentHTML("beforeend",i),Zr.is.element(r)&&s.appendChild(r),a.appendChild(s),t.appendChild(a)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Zr.is.element(e)&&Zr.is.number(t)){var i=Zr.getHours(this.duration)>0;e.innerText=Zr.formatTime(t,i,n)}},updateVolume:function(){this.supported.ui&&(Zr.is.element(this.elements.inputs.volume)&&ro.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Zr.is.element(this.elements.buttons.mute)&&Zr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Zr.is.element(e)&&(e.value=t,ro.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&Zr.is.event(e)){var n=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=Zr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&ro.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":!function(e,n){var i=Zr.is.number(n)?n:0,r=Zr.is.element(e)?e:t.elements.display.buffer;if(Zr.is.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];Zr.is.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=Zr.is.event(e)?e.target:e;Zr.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),io.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Zr.is.element(this.elements.inputs.seek)&&Zr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){Zr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Zr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Zr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ro.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Zr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!Zr.is.element(this.elements.display.duration)&&this.config.invertTime;ro.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ro.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=Zr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ro.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ro.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),ro.updateSeekTooltip.call(this)}},toggleTab:function(e,t){Zr.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(Zr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Zr.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!Zr.is.empty(this.options.quality)&&this.options.quality.length>1;if(ro.toggleTab.call(this,"quality",i),ro.checkMenu.call(this),i){Zr.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=ro.getLabel.call(t,"quality",e);ro.createMenuItem.call(t,e,n,"quality",i,function(e){var n="";switch(e){case 2160:n="4K";break;case 1440:case 1080:case 720:n="HD";break;case 576:case 480:n="SD"}return n.length?ro.createBadge.call(t,n):null}(e))}),ro.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?no("normal",this.config):t+"×";case"quality":return Zr.is.number(t)?t+"p":Zr.toTitleCase(t);case"captions":return oo.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=Zr.is.empty(n)?this[e]:n,Zr.is.empty(r)&&(r=this.config[e].default),!Zr.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(Zr.is.element(o)||(o=i&&i.querySelector("ul")),Zr.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=ro.getLabel.call(this,e,r);var a=o&&o.querySelector('input[value="'+r+'"]');Zr.is.element(a)&&(a.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=oo.getTracks.call(this).length;if(ro.toggleTab.call(this,"captions",n),Zr.emptyElement(t),ro.checkMenu.call(this),n){var i=oo.getTracks.call(this).map(function(t){return{language:Zr.is.empty(t.language)?"enabled":t.language,label:oo.getLabel.call(e,t)}});i.unshift({language:"",label:no("disabled",this.config)}),i.forEach(function(n){ro.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?ro.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=i.map(function(e){return e.language}),ro.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Zr.is.element(this.elements.settings.panes.speed)){Zr.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!Zr.is.empty(this.options.speed)&&this.options.speed.length>1;if(ro.toggleTab.call(this,"speed",n),ro.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");Zr.emptyElement(i),this.options.speed.forEach(function(e){var n=ro.getLabel.call(t,"speed",e);ro.createMenuItem.call(t,e,i,"speed",n)}),ro.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!Zr.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Zr.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Zr.is.element(t)&&Zr.is.element(n)){var i=Zr.is.boolean(e)?e:Zr.is.element(t)&&t.hasAttribute("hidden");if(Zr.is.event(e)){var r=Zr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Zr.is.element(n)&&n.setAttribute("aria-expanded",i),Zr.is.element(t)&&(Zr.toggleHidden(t,!i),Zr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Zr.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,n=document.getElementById(e);if(Zr.is.element(n)&&"tabpanel"===n.getAttribute("role")){var i=t.querySelector('[role="tabpanel"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+i.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),eo.transitions&&!eo.reducedMotion){r.style.width=i.scrollWidth+"px",r.style.height=i.scrollHeight+"px";var o=ro.getTabSize.call(this,n);Zr.on(r,Zr.transitionEndEvent,function e(t){t.target===r&&["width","height"].includes(t.propertyName)&&(r.style.width="",r.style.height="",Zr.off(r,Zr.transitionEndEvent,e))}),r.style.width=o.width+"px",r.style.height=o.height+"px"}Zr.toggleHidden(i,!0),i.setAttribute("tabindex",-1),Zr.toggleHidden(n,!1);var a=Zr.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(a).forEach(function(e){e.setAttribute("aria-expanded",!0)}),n.removeAttribute("tabindex"),n.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Zr.is.empty(this.config.controls))return null;var n=Zr.createElement("div",Zr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(ro.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(ro.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(ro.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(ro.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Zr.createElement("div",Zr.getAttributesFromSelector(this.config.selectors.progress)),r=ro.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(ro.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Zr.createElement("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(ro.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(ro.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(ro.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a=Zr.createElement("div",{class:"plyr__volume"}),s={max:1,step:.05,value:this.config.volume},l=ro.createRange.call(this,"volume",Zr.extend(s,{id:"plyr-volume-"+e.id}));a.appendChild(l.label),a.appendChild(l.input),this.elements.volume=a,n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(ro.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Zr.is.empty(this.config.settings)){var c=Zr.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(ro.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Zr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=Zr.createElement("div"),h=Zr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),d=Zr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Zr.createElement("li",{role:"tab",hidden:""}),r=Zr.createElement("button",Zr.extend(Zr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),no(n,t.config)),o=Zr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),d.appendChild(i),t.elements.settings.tabs[n]=i}),h.appendChild(d),f.appendChild(h),this.config.settings.forEach(function(n){var i=Zr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=Zr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},no(n,t.config));i.appendChild(r);var o=Zr.createElement("ul");i.appendChild(o),f.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(f),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&eo.pip&&n.appendChild(ro.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&eo.airplay&&n.appendChild(ro.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(ro.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(ro.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&ro.setQualityMenu.call(this,to.getQualityOptions.call(this)),ro.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=ro.getIconUrl.call(this);t.cors&&Zr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;Zr.is.string(this.config.controls)||Zr.is.element(this.config.controls)?n=this.config.controls:Zr.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=ro.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:oo.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Qr(e,2),i=n[0],r=n[1];t=Zr.replaceAll(t,"{"+i+"}",r)}),t};r&&(Zr.is.string(this.config.controls)?n=o(n):Zr.is.element(n)&&(n.innerHTML=o(n.innerHTML)));var a=void 0;if(Zr.is.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),Zr.is.element(a)||(a=this.elements.container),Zr.is.element(n)?a.appendChild(n):n&&a.insertAdjacentHTML("beforeend",n),Zr.is.element(this.elements.controls)||ro.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Zr.repaint(a),this.config.tooltips.controls){var s=Zr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){Zr.toggleClass(t,e.config.classNames.hidden,!1),Zr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},oo={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Zr.is.empty(e)||(this.captions.language=e),Zr.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Zr.is.boolean(this.captions.active)){var t=this.storage.get("captions");Zr.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!eo.textTracks)Zr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ro.setCaptionsMenu.call(this);else{Zr.is.element(this.elements.captions)||(this.elements.captions=Zr.createElement("div",Zr.getAttributesFromSelector(this.config.selectors.captions)),Zr.insertAfter(this.elements.captions,this.elements.wrapper)),Zr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Zr.is.empty(oo.getTracks.call(this)));var n=oo.getTracks.call(this);if(!Zr.is.empty(n)){if(Zr.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Zr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Zr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Zr.removeElement(e)})})}oo.setLanguage.call(this),oo.show.call(this),Zr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ro.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){oo.getTracks.call(this).forEach(function(t){Zr.on(t,"cuechange",function(t){return oo.setCue.call(e,t)}),t.mode="hidden"});var t=oo.getCurrentTrack.call(this);Zr.is.track(t)&&Array.from(t.activeCues||[]).length&&oo.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Zr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=oo.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=Zr.getElement.call(this,"track[default]")),n)||(n=Qr(t,1)[0]);return n},getLabel:function(e){var t=e;return!Zr.is.track(t)&&eo.textTracks&&this.captions.active&&(t=oo.getCurrentTrack.call(this)),Zr.is.track(t)?Zr.is.empty(t.label)?Zr.is.empty(t.language)?no("enabled",this.config):e.language.toUpperCase():t.label:no("disabled",this.config)},setCue:function(e){var t=Zr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===oo.getCurrentTrack.call(this)&&(Zr.is.cue(i)?oo.setText.call(this,i.getCueAsHTML()):oo.setText.call(this,null),Zr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Zr.is.element(this.elements.captions)){var t=Zr.createElement("span");Zr.emptyElement(this.elements.captions);var n=Zr.is.nullOrUndefined(e)?"":e;Zr.is.string(n)?t.innerText=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");Zr.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Zr.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Zr.toggleState(this.elements.buttons.captions,!0))}},ao=function(){},so=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Gr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Yr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):ao}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):ao}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):ao}}]),e}(),lo={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.9/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},co=Zr.getBrowser();function uo(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Zr.is.element(e)&&Zr.toggleState(e,this.active),Zr.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),co.isIos||Zr.trapFocus.call(this.player,this.target,this.active)}}function fo(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Zr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),uo.call(this)}var ho=function(){function e(t){var n=this;Gr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},Zr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){uo.call(n)}),Zr.on(this.player.elements.container,"dblclick",function(e){Zr.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Yr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Zr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(co.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Zr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():fo.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(co.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Zr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else fo.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:Zr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return co.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Zr.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!Zr.is.function(document[t+"ExitFullscreen"])&&!Zr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),po=Zr.getBrowser(),go={addStyleHook:function(){Zr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Zr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void go.toggleNativeControls.call(this,!0);Zr.is.element(this.elements.controls)||(ro.inject.call(this),this.listeners.controls()),go.toggleNativeControls.call(this),oo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,ro.updateVolume.call(this),ro.timeUpdate.call(this),go.checkPlaying.call(this),Zr.toggleClass(this.elements.container,this.config.classNames.pip.supported,eo.pip&&this.isHTML5&&this.isVideo),Zr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,eo.airplay&&this.isHTML5),Zr.toggleClass(this.elements.container,this.config.classNames.isIos,po.isIos),Zr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){Zr.dispatchEvent.call(e,e.media,"ready")},0),go.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&go.setPoster.call(this,this.poster)},setTitle:function(){var e=no("play",this.config);if(Zr.is.string(this.config.title)&&!Zr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Zr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Zr.getElement.call(this,"iframe");if(!Zr.is.element(t))return;var n=Zr.is.empty(this.config.title)?"video":this.config.title,i=no("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Zr.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!Zr.is.element(this.elements.poster))return Promise.reject();var n=Zr.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),go.togglePoster.call(t,!0),e});return n.catch(function(){return go.togglePoster.call(t,!1)}),n},checkPlaying:function(e){Zr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Zr.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),Zr.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),Zr.toggleState(this.elements.buttons.play,this.playing),Zr.is.event(e)&&"timeupdate"===e.type||go.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Zr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),go.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},mo=Zr.getBrowser(),yo=function(){function e(t){Gr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Yr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Zr.is.number(n)){if(i){var o=Zr.getFocusElement();if(Zr.is.element(o)&&Zr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){ro.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Zr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Zr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Zr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Zr.toggleListener(document.body,"click",this.toggleMenu,e),Zr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Zr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Zr.on(this.player.elements.container,"focusout",function(t){Zr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Zr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Zr.toggleClass(Zr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),Zr.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var n=e.player.elements.controls;"enterfullscreen"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(go.toggleControls.call(e.player,!0),i=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return go.toggleControls.call(e.player,!1)},i)})}},{key:"media",value:function(){var e=this;if(Zr.on(this.player.media,"timeupdate seeking seeked",function(t){return ro.timeUpdate.call(e.player,t)}),Zr.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return ro.durationUpdate.call(e.player,t)}),Zr.on(this.player.media,"loadeddata",function(){Zr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Zr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Zr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),Zr.on(this.player.media,"progress playing seeking seeked",function(t){return ro.updateProgress.call(e.player,t)}),Zr.on(this.player.media,"volumechange",function(t){return ro.updateVolume.call(e.player,t)}),Zr.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return go.checkPlaying.call(e.player,t)}),Zr.on(this.player.media,"waiting canplay seeked playing",function(t){return go.checkLoading.call(e.player,t)}),Zr.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Zr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Zr.is.element(t))return;Zr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Zr.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Zr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Zr.on(this.player.media,"ratechange",function(){ro.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Zr.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),Zr.on(this.player.media,"qualitychange",function(t){ro.updateSetting.call(e.player,"quality",null,t.detail.quality)}),Zr.on(this.player.media,"languagechange",function(){ro.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Zr.on(this.player.media,"captionsenabled captionsdisabled",function(){ro.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Zr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),Zr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=mo.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;Zr.is.function(r)&&(o=r.call(e.player,t)),o&&Zr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=e.player.config.listeners[o],l=Zr.is.function(s);Zr.on(t,i,function(e){return n(e,r,o)},a&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){ro.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var i=function(){var t="plyr-settings-"+e.player.id+"-home";ro.showTab.call(e.player,t)};if(Zr.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.language=t.target.value,i()},"language");else if(Zr.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},"quality");else if(Zr.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},"speed");else{var r=t.target;ro.showTab.call(e.player,r.getAttribute("aria-controls"))}}),i(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var n=e.player.elements.progress.getBoundingClientRect(),i=100/n.width*(t.pageX-n.left);t.currentTarget.setAttribute("seek-value",i)}),i(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var n=t.currentTarget,i=n.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(t.type);i&&r?(n.removeAttribute("play-on-seeked"),e.player.play()):!r&&e.player.playing&&(n.setAttribute("play-on-seeked",""),e.player.pause())}),i(this.player.elements.inputs.seek,t,function(t){var n=t.currentTarget,i=n.getAttribute("seek-value");Zr.is.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),e.player.currentTime=i/n.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Zr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,ro.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),mo.isWebkit&&i(Zr.getElements.call(this.player,'input[type="range"]'),"input",function(t){ro.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return ro.updateSeekTooltip.call(e.player,t)}),i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){var n=e.player,i=n.config,r=n.elements,o=n.timers;if(Zr.toggleClass(r.controls,i.classNames.noTransition,"focusin"===t.type),go.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){Zr.toggleClass(r.controls,i.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return go.toggleControls.call(e.player,!1)},a)}}),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function vo(e){this.media.paused===e&&(this.media.paused=!e,Zr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var bo={setup:function(){var e=this;Zr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),bo.setAspectRatio.call(this),Zr.is.object(window.Vimeo)?bo.ready.call(this):Zr.loadScript(this.config.urls.vimeo.sdk).then(function(){bo.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Zr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=Zr.buildUrlParams(n),r=t.media.getAttribute("src");Zr.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var o=Zr.parseVimeoId(r),a=Zr.createElement("iframe"),s=Zr.format(t.config.urls.vimeo.iframe,o,i);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=Zr.createElement("div",{class:t.config.classNames.embedContainer});l.appendChild(a),t.media=Zr.replaceElement(l,t.media),Zr.fetch(Zr.format(t.config.urls.vimeo.api,o),"json").then(function(e){if(!Zr.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",go.setPoster.call(t,n.href)}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return vo.call(t,!0),t.embed.play()},t.media.pause=function(){return vo.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume;i.seeking=!0,Zr.dispatchEvent.call(t,i,"seeking"),Promise.resolve(r&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return r&&n.pause()}).then(function(){return r&&n.setVolume(o)}).catch(function(){})}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Zr.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&ro.setSpeedMenu.call(t,[])})}});var f=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return f},set:function(e){t.embed.setVolume(e).then(function(){f=e,Zr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var n=!!Zr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){h=n,Zr.dispatchEvent.call(t,t.media,"volumechange")})}});var d=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return d},set:function(e){var n=Zr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){d=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Zr.getAspectRatio(t[0],t[1]);bo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,go.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Zr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Zr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,oo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Zr.stripHTML(e.cues[0].text)),oo.setText.call(t,n)}),t.embed.on("loaded",function(){Zr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){vo.call(t,!0),Zr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){vo.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Zr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Zr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Zr.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,Zr.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,Zr.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,Zr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Zr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return go.build.call(t)},0)}};function wo(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function Eo(e){this.media.paused===e&&(this.media.paused=!e,Zr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var ko={setup:function(){var e=this;Zr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),ko.setAspectRatio.call(this),Zr.is.object(window.YT)&&Zr.is.function(window.YT.Player)?ko.ready.call(this):(Zr.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){ko.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Zr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Zr.is.empty(n))return this.config.title=n,void go.setTitle.call(this)}var i=this.config.keys.google;if(Zr.is.string(i)&&!Zr.is.empty(i)){var r=Zr.format(this.config.urls.youtube.api,e,i);Zr.fetch(r).then(function(e){Zr.is.object(e)&&(t.config.title=e.items[0].snippet.title,go.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Zr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Zr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Zr.parseYouTubeId(n),r=Zr.generateId(e.provider),o=Zr.createElement("div",{id:r});e.media=Zr.replaceElement(o,e.media);var a=function(e){return"https://img.youtube.com/vi/"+i+"/"+e+"default.jpg"};Zr.loadImage(a("maxres"),121).catch(function(){return Zr.loadImage(a("sd"),121)}).catch(function(){return Zr.loadImage(a("hq"))}).then(function(t){return go.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Zr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Zr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){Zr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Zr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;ko.getTitle.call(e,i),e.media.play=function(){Eo.call(e,!0),n.playVideo()},e.media.pause=function(){Eo.call(e,!1),n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,Zr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return wo(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(wo(i)),Zr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Zr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Zr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Zr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Zr.dispatchEvent.call(e,e.media,"timeupdate"),Zr.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Zr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Zr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return go.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,Zr.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:Zr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),Zr.dispatchEvent.call(e,e.media,"progress");break;case 0:Eo.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):Zr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused?e.media.pause():(Eo.call(e,!0),Zr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Zr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),Zr.dispatchEvent.call(e,e.media,"durationchange")),ro.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),Zr.is.empty(n)?n:Zr.dedupe(n.map(function(e){return wo(e)})))));break;case 2:e.muted||e.embed.unMute(),Eo.call(e,!1)}Zr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},So={setup:function(){if(this.media)if(Zr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Zr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Zr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=Zr.createElement("div",{class:this.config.classNames.video}),Zr.wrap(this.media,this.elements.wrapper),this.elements.poster=Zr.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":ko.setup.call(this);break;case"vimeo":bo.setup.call(this)}else this.isHTML5&&to.extend.call(this);else this.debug.warn("No media element found!")}},To=function(){function e(t){var n=this;Gr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Yr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Zr.is.object(window.google)&&Zr.is.object(window.google.ima)?this.ready():Zr.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Zr.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Zr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=no("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),Zr.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(Zr.is.element(n)){var i=100/t.player.duration*e,r=Zr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Zr.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;Zr.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Zr.is.array(o)&&o.forEach(function(e){Zr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Zr.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Zr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!Zr.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Zr.buildUrlParams(e)}}]),e}(),Ao={insertElements:function(e,t){var n=this;Zr.is.string(t)?Zr.insertElement(e,this.media,{src:t}):Zr.is.array(t)&&t.forEach(function(t){Zr.insertElement(e,n.media,t)})},change:function(e){var t=this;Zr.is.object(e)&&"sources"in e&&e.sources.length?(to.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],Zr.removeElement(t.media),t.media=null,Zr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Zr.is.empty(e.sources[0].provider)?$r.html5:e.sources[0].provider,t.supported=eo.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=Zr.createElement("video");break;case"html5:audio":t.media=Zr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Zr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Zr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),Zr.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),go.addStyleHook.call(t),t.isHTML5&&Ao.insertElements.call(t,"source",e.sources),t.config.title=e.title,So.setup.call(t),t.isHTML5&&("tracks"in e&&Ao.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&go.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},_o=function(){function e(t,n){var i=this;if(Gr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=eo.touch,this.media=t,Zr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Zr.is.nodeList(this.media)||Zr.is.array(this.media))&&(this.media=this.media[0]),this.config=Zr.extend({},lo,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new so(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",eo),!Zr.is.nullOrUndefined(this.media)&&Zr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(eo.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null,l=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),Zr.is.element(a)){if(s=a.getAttribute("src"),this.provider=Zr.getProviderByUrl(s),this.elements.container=this.media,this.media=a,this.elements.container.className="",l=Zr.getUrlParams(s),!Zr.is.empty(l)){var c=["1","true"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Zr.is.empty(this.provider)||!Object.keys($r).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Xr.video;break;case"video":case"audio":this.type=o,this.provider=$r.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=eo.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new yo(this),this.storage=new Jr(this),this.media.plyr=this,Zr.is.element(this.elements.container)||(this.elements.container=Zr.createElement("div"),Zr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),go.addStyleHook.call(this),So.setup.call(this),this.config.debug&&Zr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&go.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new ho(this),this.ads=new To(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Yr(e,[{key:"play",value:function(){return Zr.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&Zr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Zr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):Zr.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Zr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Zr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Zr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Zr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=Zr.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Zr.toggleState(this.elements.buttons.captions,this.captions.active),Zr.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Zr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){eo.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Zr.hasClass(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Zr.toggleClass(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!Zr.is.empty(this.config.settings)&&ro.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";Zr.dispatchEvent.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Zr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Zr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Zr.removeElement(t.elements.buttons.play),Zr.removeElement(t.elements.captions),Zr.removeElement(t.elements.controls),Zr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Zr.is.function(e)&&e()):(t.listeners.clear(),Zr.replaceElement(t.elements.original,t.elements.container),Zr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Zr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),go.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Zr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return eo.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===$r.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===$r.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===$r.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Xr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Xr.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=Zr.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Zr.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration||0;return e||t}},{key:"volume",set:function(e){var t=e;Zr.is.string(t)&&(t=Number(t)),Zr.is.number(t)||(t=this.storage.get("volume")),Zr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!Zr.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Zr.is.boolean(t)||(t=this.storage.get("muted")),Zr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Zr.is.number(e)&&(t=e),Zr.is.number(t)||(t=this.storage.get("speed")),Zr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(Zr.is.empty(e)||(t=Number(e)),Zr.is.number(t)&&0!==t||(t=this.storage.get("quality")),Zr.is.number(t)||(t=this.config.quality.selected),Zr.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=Zr.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Zr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){Ao.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?go.setPoster.call(this,e):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Zr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(Zr.is.string(e))if(Zr.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,oo.setText.call(this,null),oo.setLanguage.call(this),Zr.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(eo.pip){var i=Zr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return eo.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return eo.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Zr.loadSprite(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return Zr.is.string(t)?i=Array.from(document.querySelectorAll(t)):Zr.is.nodeList(t)?i=Array.from(t):Zr.is.array(t)&&(i=t.filter(function(e){return Zr.is.element(e)})),Zr.is.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return _o.defaults=Zr.cloneDeep(lo),_o}); +"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},f=!s&&!a(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),h=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},d=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=h(t,!0),o(n),f)try{return d(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=s?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s="function"==typeof r;s&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(s&&(v(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,a,s,l,c=e&A.F,u=e&A.G,f=e&A.S,h=e&A.P,d=e&A.B,p=u?n:f?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=d&&a?T(s,n):h&&"function"==typeof s?T(Function.call,s):s,p&&k(p,o,s,e&A.U),g[o]!=s&&m(g,o,l),h&&y[o]!=s&&(y[o]=s)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),M=!(!n.ArrayBuffer||!n.DataView),L=M,O=0,N="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");O<9;)(_=n[N[O++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):L=!1;var j={ABV:M,CONSTR:L,TYPED:P,VIEW:x},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,U=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},B=Math.min,V=function(e){return e>0?B(U(e),9007199254740991):0},D=function(e){if(void 0===e)return 0;var t=U(e),n=V(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=U(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=Y(t),a=V(o.length),s=J(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},X=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=$(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),ae=oe.concat("length","prototype"),se={f:Object.getOwnPropertyNames||function(e){return re(e,ae)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),fe=p.f,he=ue("toStringTag"),de=function(e,t,n){e&&!v(e=n?e:e.prototype,he)&&fe(e,he,{configurable:!0,value:t})},pe=t(function(e,t){var i=se.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,f=n.Math,h=n.RangeError,d=n.Infinity,g=c,y=f.abs,v=f.pow,b=f.floor,w=f.log,E=f.LN2,k=s?"_b":"buffer",S=s?"_l":"byteLength",T=s?"_o":"byteOffset";function A(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,f=0,h=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===d?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[f++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[f++]=255&i,i/=256,s-=8);return a[--f]|=128*h,a}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-d:d;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function M(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function O(e){return A(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=D(+n);if(r+t>e[S])throw h(l);var o=e[k]._b,a=r+e[T],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=D(+n);if(a+t>e[S])throw h(l);for(var s=e[k]._b,c=a+e[T],u=i(+r),f=0;f<t;f++)s[c+f]=u[o?f:t-f-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var B,H=(c=function(e){return F(this,c),new g(D(e))})[o]=g[o],W=i(g),z=0;W.length>z;)(B=W[z++])in c||m(c,B,g[B]);H.constructor=c}var G=new u(new c(2)),Y=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=D(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=U(t);if(r<0||r>i)throw h("Wrong offset!");if(r+(n=void 0===n?i-r:V(n))>i)throw h("Wrong length!");this[k]=e,this[T]=r,this[S]=n},s&&(N(c,"byteLength","_l"),N(u,"buffer","_b"),N(u,"byteLength","_l"),N(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,x,t,arguments[2])},setUint16:function(e,t){q(this,2,e,x,t,arguments[2])},setInt32:function(e,t){q(this,4,e,M,t,arguments[2])},setUint32:function(e,t){q(this,4,e,M,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,L,t,arguments[2])}});de(c,"ArrayBuffer"),de(u,"DataView"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[ge])?t:S(n)},ye=ue("species"),ve=function(e){var t=n[e];s&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Se=we.prototype.slice,Te=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Te in e}}),C(C.P+C.U+C.F*a(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(me(this,we))(V(r-i)),s=new Ee(this),l=new Ee(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ve("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},xe=ue("iterator"),Me=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||Me[xe]===e)},Oe=Object.keys||function(e){return re(e,oe)},Ne=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Oe(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},qe=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[oe[n]];return qe()},Ue=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Ne(n,t)},Be=te("IE_PROTO"),Ve=Object.prototype,De=Object.getPrototypeOf||function(e){return e=le(e),v(e,Be)?e[Be]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ve:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(null!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},ze=Array.isArray||function(e){return"Array"==W(e)},Ge=ue("species"),Ye=function(e,t){return new(function(e){var t;return ze(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ye;return function(t,c,u){for(var f,h,d=le(t),p=z(d),g=T(c,u,3),m=V(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((s||y in p)&&(h=g(f=p[y],y,d),e))if(n)v[y]=h;else if(h)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:v.push(f)}else if(o)return!1;return a?-1:r||o?o:v}},Qe=ue("unscopables"),Je=Array.prototype;null==Je[Qe]&&m(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=Ue(Ze,{next:g(1,n)}),de(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,a){et(n,t,i);var s,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",h="values"==r,d=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&g||u(r),b=r?h?u("entries"):y:void 0,w="Array"==t&&p.entries||g;if(w&&(c=De(w.call(new e)))!==Object.prototype&&c.next&&(de(c,f,!0),v(c,tt)||m(c,tt,it)),h&&g&&"values"!==g.name&&(d=!0,y=function(){return g.call(this)}),(nt||d||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[f]=it,r)if(s={values:h?y:u("values"),keys:o?y:u("keys"),entries:b},a)for(l in s)l in p||k(p,l,s[l]);else C(C.P+C.F*(nt||d),t,s);return s},ot=rt(Array,"Array",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Xe(1)):Xe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,$e("keys"),$e("values"),$e("entries");var at=ue("iterator"),st=!1;try{[7][at]().return=function(){st=!0}}catch(e){}var lt=function(e,t){if(!t&&!st)return!1;var n=!1;try{var i=[7],r=i[at]();r.next=function(){return{done:n=!0}},i[at]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ft=Object.getOwnPropertyDescriptor,ht={f:s?ft:function(e,t){if(e=Y(e),t=h(t,!0),f)try{return ft(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},dt=t(function(e){if(s){var t=n,i=a,o=C,l=j,c=pe,u=T,f=F,d=g,y=m,b=I,w=U,k=V,S=D,A=J,_=h,P=v,x=Ce,M=r,L=le,O=Le,N=Ue,R=De,q=se.f,B=We,H=E,W=ue,z=Ke,G=$,Y=me,K=ot,Q=Pe,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=ht,re=ne.f,oe=ie.f,ae=t.RangeError,fe=t.TypeError,he=t.Uint8Array,de=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Se=z(5),Te=z(6),Ae=G(!0),_e=G(!1),xe=K.values,Me=K.keys,Oe=K.entries,Ne=de.lastIndexOf,je=de.reduce,Ie=de.reduceRight,Fe=de.join,Re=de.sort,qe=de.slice,Be=de.toString,Ve=de.toLocaleString,He=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ye=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new he(new Uint16Array([1]).buffer)[0]}),et=!!he&&!!he.prototype.set&&i(function(){new he(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ae("Wrong offset!");return n},nt=function(e){if(M(e)&&Je in e)return e;throw fe(e+" is not a typed array!")},it=function(e,t){if(!(M(e)&&Ge in e))throw fe("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return at(Y(e,e[Ye]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},st=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,f=void 0!==c,h=B(s);if(null!=h&&!O(h)){for(a=h.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(f&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(s.length),r=it(this,n);n>t;t++)r[t]=f?c(s[t],t):s[t];return r},ft=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},dt=!!he&&i(function(){Ve.call(new he(1))}),pt=function(){return Ve.apply(dt?qe.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),o=0;if(r+t>n)throw ae("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return Me.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return M(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?d(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&M(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Be.call({})})&&(Be=Ve=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Be,toLocaleString:pt}),st(kt,"buffer","b"),st(kt,"byteOffset","o"),st(kt,"byteLength","l"),st(kt,"length","e"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?"Clamped":"")+"Array",c="get"+e,u="set"+e,h=t[s],d=h||{},p=h&&R(h),g=!h||!l.ABV,m={},v=h&&h.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(h=r(function(e,t,i,r){f(e,h,s,"_d");var o,a,l,c,u=0,d=0;if(M(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?at(h,t):ut.call(h,t);o=t,d=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ae("Wrong length!");if((a=p-d)<0)throw ae("Wrong length!")}else if((a=k(r)*n)+d>p)throw ae("Wrong length!");l=a/n}else l=S(t),o=new ge(a=l*n);for(y(e,"_d",{b:o,o:d,l:a,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=h.prototype=N(kt),y(v,"constructor",h)):i(function(){h(1)})&&i(function(){new h(-1)})&&X(function(e){new h,new h(null),new h(1.5),new h(e)},!0)||(h=r(function(e,t,i,r){var o;return f(e,h,s),M(t)?t instanceof ge||"ArrayBuffer"==(o=x(t))||"SharedArrayBuffer"==o?void 0!==r?new d(t,tt(i,n),r):void 0!==i?new d(t,tt(i,n)):new d(t):Je in t?at(h,t):ut.call(h,t):new d(S(t))}),be(p!==Function.prototype?q(d).concat(q(p)):q(d),function(e){e in h||y(h,e,d[e])}),h.prototype=v,v.constructor=h);var w=v[He],E=!!w&&("values"==w.name||null==w.name),T=vt.values;y(h,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ye,h),(a?new h(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),m[s]=h,o(o.G+o.W+o.F*(h!=d),m),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){d.of.call(h,1)}),s,{from:ut,of:ft}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,s,gt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!E,s,vt),v.toString!=Be&&(v.toString=Be),o(o.P+o.F*i(function(){new h(1).slice()}),s,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=E?w:T,E||y(v,He,T)}}else e.exports=function(){}});dt("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),dt("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,f,h=s?function(){return e}:We(e),d=T(r,a,i?2:1),p=0;if("function"!=typeof h)throw TypeError(e+" is not iterable!");if(Le(h)){for(l=V(e.length);l>p;p++)if((f=i?d(o(c=e[p])[0],c[1]):d(e[p]))===t||f===n)return f}else for(u=h.call(e);!(c=u.next()).done;)if((f=pt(u,d,c.value,i))===t||f===n)return f};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=(mt.KEY,mt.NEED,mt.fastKey,mt.getWeak,mt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),vt=p.f,bt=mt.fastKey,wt=s?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=Ue(null),e._f=void 0,e._l=void 0,e[wt]=0,null!=o&>(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),s&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?"entries":"values",!n,!0),ve(t)}},St=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Tt={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,ht.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},At=Tt.set,_t=function(e,t,i,o,s,l){var c=n[e],u=c,f=s?"set":"add",h=u&&u.prototype,d={},p=function(e){var t=h[e];k(h,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||h.forEach&&!a(function(){(new u).entries().next()}))){var g=new u,m=g[f](l?{}:-0,1)!=g,y=a(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[f](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return null!=n&>(n,s,i[f],i),i})).prototype=h,h.constructor=u),(y||b)&&(p("delete"),p("has"),s&&p("get")),(b||m)&&p(f),l&&h.clear&&delete h.clear}else u=o.getConstructor(t,e,s,f),I(u.prototype,i),mt.NEED=!0;return de(u,e),d[e]=u,C(C.G+C.W+C.F*(u!=c),d),l||o.setStrong(u,e,s),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,xt=!Pt||a(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,a=ut.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,f=0;u>f;)a.call(l,s=c[f++])&&(n[s]=l[s]);return n}:Pt,Mt=mt.getWeak,Lt=Ke(5),Ot=Ke(6),Nt=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Ot(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Nt++,e._l=void 0,null!=r&>(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=Mt(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,s=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},f=e.exports=_t("WeakMap",c,u,Rt,!0,!0);a(function(){return 7!=(new f).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),xt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=f.prototype,i=n[e];k(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return"set"==e?this:s}return i.call(this,n,a)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Ut=Function.apply;C(C.S+C.F*!a(function(){qt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return qt?qt(i,t,r):Ut.call(i,t,r)}});var Bt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Vt=[].slice,Dt={},Ht=Function.bind||function(e){var t=S(this),n=Vt.call(arguments,1),i=function(){var r=n.concat(Vt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Dt)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Dt[t]=Function("F,a","return new F("+i.join(",")+")")}return Dt[t](e,n)}(t,r.length,r):Bt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=a(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!a(function(){Wt(function(){})});C(C.S+C.F*(zt||Gt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var a=n.prototype,s=Ue(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),C(C.S+C.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=h(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=ht.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Yt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=ht.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=De(t))?e(a,n,s):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ht.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return De(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=se.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var $t=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=ht.f(o(t),n);if(!c){if(r(s=De(t)))return e(s,n,i,l);c=g(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((a=ht.f(l,n)||g(0)).value=i,p.f(l,n,a),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Tt&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){Tt.check(e,t);try{return Tt.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,an=n.Dispatch,sn=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++sn]=function(){Bt("function"==typeof e?e:Function(e),t)},Xt(sn),sn},rn=function(e){delete ln[e]},"process"==W(tn)?Xt=function(e){tn.nextTick(T(cn,e,1))}:an&&an.now?Xt=function(e){an.now(T(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,Xt=T(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):Xt="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(T(cn,e,1),0)});var fn={set:nn,clear:rn},hn=fn.set,dn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);function yn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}var vn,bn,wn,En,kn={f:function(e){return new yn(e)}},Sn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Tn=fn.set,An=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!dn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){hn.call(n,r)};else{var a=!0,s=document.createTextNode("");new dn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),_n=n.TypeError,Cn=n.process,Pn=n.Promise,xn="process"==Ce(Cn),Mn=function(){},Ln=bn=kn.f,On=!!function(){try{var e=Pn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(Mn,Mn)};return(xn||"function"==typeof PromiseRejectionEvent)&&e.then(Mn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},jn=function(e,t){if(!e._n){e._n=!0;var n=e._c;An(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a=r?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(r||(2==e._h&&Rn(e),e._h=1),!0===a?n=i:(c&&c.enter(),n=a(i),c&&c.exit()),n===t.promise?l(_n("Promise-chain cycle")):(o=Nn(n))?o.call(n,s,l):s(n)):l(i)}catch(e){l(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){Tn.call(n,function(){var t,i,r,o=e._v,a=Fn(e);if(a&&(t=Sn(function(){xn?Cn.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=xn||Fn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Fn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Rn=function(e){Tn.call(n,function(){var t;xn?Cn.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},qn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),jn(t,!0))},Un=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw _n("Promise can't be resolved itself");(t=Nn(e))?An(function(){var i={_w:n,_d:!1};try{t.call(e,T(Un,i,1),T(qn,i,1))}catch(e){qn.call(i,e)}}):(n._v=e,n._s=1,jn(n,!1))}catch(e){qn.call({_w:n,_d:!1},e)}}};On||(Pn=function(e){F(this,Pn,"Promise","_h"),S(e),vn.call(this);try{e(T(Un,this,1),T(qn,this,1))}catch(e){qn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Pn.prototype,{then:function(e,t){var n=Ln(me(this,Pn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=xn?Cn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&jn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),wn=function(){var e=new vn;this.promise=e,this.resolve=T(Un,e,1),this.reject=T(qn,e,1)},kn.f=Ln=function(e){return e===Pn||e===En?new wn(e):bn(e)}),C(C.G+C.W+C.F*!On,{Promise:Pn}),de(Pn,"Promise"),ve("Promise"),En=i.Promise,C(C.S+C.F*!On,"Promise",{reject:function(e){var t=Ln(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!On,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=kn.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(On&<(function(e){Pn.all(e).catch(Mn)})),"Promise",{all:function(e){var t=this,n=Ln(t),i=n.resolve,r=n.reject,o=Sn(function(){var n=[],o=0,a=1;gt(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Ln(t),i=n.reject,r=Sn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Bn={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:Bn.f(e)})},Hn=se.f,Wn={}.toString,zn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return zn&&"[object Window]"==Wn.call(e)?function(e){try{return Hn(e)}catch(e){return zn.slice()}}(e):Hn(Y(e))}},Yn=mt.KEY,Kn=ht.f,Qn=p.f,Jn=Gn.f,$n=n.Symbol,Xn=n.JSON,Zn=Xn&&Xn.stringify,ei=ue("_hidden"),ti=ue("toPrimitive"),ni={}.propertyIsEnumerable,ii=Z("symbol-registry"),ri=Z("symbols"),oi=Z("op-symbols"),ai=Object.prototype,si="function"==typeof $n,li=n.QObject,ci=!li||!li.prototype||!li.prototype.findChild,ui=s&&a(function(){return 7!=Ue(Qn({},"a",{get:function(){return Qn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Kn(ai,t);i&&delete ai[t],Qn(e,t,n),i&&e!==ai&&Qn(ai,t,i)}:Qn,fi=function(e){var t=ri[e]=Ue($n.prototype);return t._k=e,t},hi=si&&"symbol"==typeof $n.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof $n},di=function(e,t,n){return e===ai&&di(oi,t,n),o(e),t=h(t,!0),o(n),v(ri,t)?(n.enumerable?(v(e,ei)&&e[ei][t]&&(e[ei][t]=!1),n=Ue(n,{enumerable:g(0,!1)})):(v(e,ei)||Qn(e,ei,g(1,{})),e[ei][t]=!0),ui(e,t,n)):Qn(e,t,n)},pi=function(e,t){o(e);for(var n,i=function(e){var t=Oe(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=Y(t)),r=0,a=i.length;a>r;)di(e,n=i[r++],t[n]);return e},gi=function(e){var t=ni.call(this,e=h(e,!0));return!(this===ai&&v(ri,e)&&!v(oi,e))&&(!(t||!v(this,e)||!v(ri,e)||v(this,ei)&&this[ei][e])||t)},mi=function(e,t){if(e=Y(e),t=h(t,!0),e!==ai||!v(ri,t)||v(oi,t)){var n=Kn(e,t);return!n||!v(ri,t)||v(e,ei)&&e[ei][t]||(n.enumerable=!0),n}},yi=function(e){for(var t,n=Jn(Y(e)),i=[],r=0;n.length>r;)v(ri,t=n[r++])||t==ei||t==Yn||i.push(t);return i},vi=function(e){for(var t,n=e===ai,i=Jn(n?oi:Y(e)),r=[],o=0;i.length>o;)!v(ri,t=i[o++])||n&&!v(ai,t)||r.push(ri[t]);return r};si||(k(($n=function(){if(this instanceof $n)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===ai&&t.call(oi,n),v(this,ei)&&v(this[ei],e)&&(this[ei][e]=!1),ui(this,e,g(1,n))};return s&&ci&&ui(ai,e,{configurable:!0,set:t}),fi(e)}).prototype,"toString",function(){return this._k}),ht.f=mi,p.f=di,se.f=Gn.f=yi,ut.f=gi,Ct.f=vi,s&&k(ai,"propertyIsEnumerable",gi,!0),Bn.f=function(e){return fi(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:$n});for(var bi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),wi=0;bi.length>wi;)ue(bi[wi++]);for(var Ei=Oe(ue.store),ki=0;Ei.length>ki;)Dn(Ei[ki++]);C(C.S+C.F*!si,"Symbol",{for:function(e){return v(ii,e+="")?ii[e]:ii[e]=$n(e)},keyFor:function(e){if(!hi(e))throw TypeError(e+" is not a symbol!");for(var t in ii)if(ii[t]===e)return t},useSetter:function(){ci=!0},useSimple:function(){ci=!1}}),C(C.S+C.F*!si,"Object",{create:function(e,t){return void 0===t?Ue(e):pi(Ue(e),t)},defineProperty:di,defineProperties:pi,getOwnPropertyDescriptor:mi,getOwnPropertyNames:yi,getOwnPropertySymbols:vi}),Xn&&C(C.S+C.F*(!si||a(function(){var e=$n();return"[null]"!=Zn([e])||"{}"!=Zn({a:e})||"{}"!=Zn(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!hi(e))return ze(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!hi(t))return t}),i[1]=t,Zn.apply(Xn,i)}}),$n.prototype[ti]||m($n.prototype,ti,$n.prototype.valueOf),de($n,"Symbol"),de(Math,"Math",!0),de(n.JSON,"JSON",!0);var Si=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*a(function(){n(1)}),"Object",r)},Ti=mt.onFreeze;Si("freeze",function(e){return function(t){return e&&r(t)?e(Ti(t)):t}});var Ai=mt.onFreeze;Si("seal",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}});var _i=mt.onFreeze;Si("preventExtensions",function(e){return function(t){return e&&r(t)?e(_i(t)):t}}),Si("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Si("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Si("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Ci=ht.f;Si("getOwnPropertyDescriptor",function(){return function(e,t){return Ci(Y(e),t)}}),Si("getPrototypeOf",function(){return function(e){return De(le(e))}}),Si("keys",function(){return function(e){return Oe(le(e))}}),Si("getOwnPropertyNames",function(){return Gn.f}),C(C.S+C.F,"Object",{assign:xt});var Pi=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Pi});var xi=p.f,Mi=Function.prototype,Li=/^\s*function ([^ (]*)/;"name"in Mi||s&&xi(Mi,"name",{configurable:!0,get:function(){try{return(""+this).match(Li)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Oi=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Oi(t):Oi(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var ji,Ii=(ji=!1,function(e,t){var n,i,r=String(G(e)),o=U(t),a=r.length;return o<0||o>=a?ji?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?ji?r.charAt(o):n:ji?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return Ii(this,e)}});var Fi=function(e){var t=String(G(this)),n="",i=U(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Fi});var Ri=ue("match"),qi=function(e){var t;return r(e)&&(void 0!==(t=e[Ri])?!!t:"RegExp"==W(e))},Ui=function(e,t,n){if(qi(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Bi=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Bi]=!1,!"/./"[e](t)}catch(e){}}return!0},Di="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Ui(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Hi="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Ui(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Hi?Hi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~Ui(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Wi=function(e,t,n){var i=ue(e),r=n(G,i,""[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Wi("match",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Wi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi("split",2,function(e,t,n){var i=qi,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var a=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var s,l,c,u,f,h=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,d+"g");for(a||(s=new RegExp("^"+m.source+"$(?!\\s)",d));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(h.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(l[f]=void 0)}),l.length>1&&l.index<n.length&&o.apply(h,l.slice(1)),u=l[0].length,p=c,h.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||h.push(""):h.push(n.slice(p)),h.length>g?h.slice(0,g):h}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi("search",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var zi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),a="function"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,f=We(o);if(c&&(l=T(l,s>2?arguments[2]:void 0,2)),null==f||a==Array&&Le(f))for(n=new a(t=V(o.length));t>u;u++)zi(n,u,c?l(o[u],u):o[u]);else for(r=f.call(o),n=new a;!(i=r.next()).done;u++)zi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)zi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),$e("copyWithin");var Gi=Ke(5),Yi=!0;"find"in[]&&Array(1).find(function(){Yi=!1}),C(C.P+C.F*Yi,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("find");var Ki=Ke(6),Qi=!0;"findIndex"in[]&&Array(1).findIndex(function(){Qi=!1}),C(C.P+C.F*Qi,"Array",{findIndex:function(e){return Ki(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("findIndex"),C(C.P,"Array",{fill:ce}),$e("fill");var Ji=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Ji(e)}});var $i=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&$i(e)===e};C(C.S,"Number",{isInteger:Xi});var Zi=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return Xi(e)&&Zi(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var er=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},tr=Math.sqrt,nr=Math.acosh;C(C.S+C.F*!(nr&&710==Math.floor(nr(Number.MAX_VALUE))&&nr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:er(e-1+tr(e-1)*tr(e+1))}});var ir=Math.asinh;C(C.S+C.F*!(ir&&1/ir(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var rr=Math.atanh;C(C.S+C.F*!(rr&&1/rr(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var or=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return or(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var ar=Math.exp;C(C.S,"Math",{cosh:function(e){return(ar(e=+e)+ar(-e))/2}});var sr=Math.expm1,lr=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(lr!=Math.expm1),"Math",{expm1:lr});var cr=Math.pow,ur=cr(2,-52),fr=cr(2,-23),hr=cr(2,127)*(2-fr),dr=cr(2,-126),pr=Math.fround||function(e){var t,n,i=Math.abs(e),r=or(e);return i<dr?r*(i/dr/fr+1/ur-1/ur)*dr*fr:(n=(t=(1+fr/ur)*i)-(t-i))>hr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:pr});var gr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=gr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var mr=Math.imul;C(C.S+C.F*a(function(){return-5!=mr(4294967295,5)||2!=mr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:er}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:or});var yr=Math.exp;C(C.S+C.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(lr(e)-lr(-e))/2:(yr(e-1)-yr(-e-1))*(Math.E/2)}});var vr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=lr(e=+e),n=lr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var br=$(!0);C(C.P,"Array",{includes:function(e){return br(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("includes");var wr=ut.f,Er=function(e){return function(t){for(var n,i=Y(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)wr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},kr=Er(!1);C(C.S,"Object",{values:function(e){return kr(e)}});var Sr=Er(!0);C(C.S,"Object",{entries:function(e){return Sr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=ht.f,o=Jt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&zi(a,t,n);return a}});var Tr=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?" ":String(n),s=V(t);if(s<=o||""==a)return r;var l=s-o,c=Fi.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Ar=n.navigator,_r=Ar&&Ar.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(_r),"String",{padStart:function(e){return Tr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(_r),"String",{padEnd:function(e){return Tr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Cr=[].slice,Pr=/MSIE .\./.test(_r),xr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Cr.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Pr,{setTimeout:xr(n.setTimeout),setInterval:xr(n.setInterval)}),C(C.G+C.B,{setImmediate:fn.set,clearImmediate:fn.clear});for(var Mr=ue("iterator"),Lr=ue("toStringTag"),Or=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},jr=Oe(Nr),Ir=0;Ir<jr.length;Ir++){var Fr,Rr=jr[Ir],qr=Nr[Rr],Ur=n[Rr],Br=Ur&&Ur.prototype;if(Br&&(Br[Mr]||m(Br,Mr,Or),Br[Lr]||m(Br,Lr,Rr),Pe[Rr]=Or,qr))for(Fr in ot)Br[Fr]||k(Br,Fr,ot[Fr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",f="suspendedYield",h="executing",d="completed",p={},g={};g[a]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(M([])));y&&y!==i&&r.call(y,a)&&(g=y);var v=S.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[s]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=M,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type="throw",s.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:M(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),a=new x(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===h)throw new Error("Generator is already running");if(i===d){if("throw"===r)throw o;return L()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=_(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=h;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?d:f,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=d,n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,a){var s=w(t[e],t,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Dr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},r=function(e){return decodeURIComponent(e).replace(/\+/g," ")};"URLSearchParams"in e&&"a=1"===new URLSearchParams("?a=1").toString()||function(){var o=function(e){if(Object.defineProperty(this,"_entries",{value:{}}),"string"==typeof e){if(""!==e)for(var t,n=(e=e.replace(/^\?/,"")).split("&"),i=0;i<n.length;i++)t=n[i].split("="),this.append(r(t[0]),t.length>1?r(t[1]):"")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e="";return this.forEach(function(t,n){e.length>0&&(e+="&"),e+=i(n)+"="+i(t)}),e},e.URLSearchParams=o}()}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e),function(e){if(function(){try{var e=new URL("b","http://a");return e.pathname="c%20d","http://a/c%20d"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(e,t){"string"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument("");if(window.doc=n,t){var i=n.createElement("base");i.href=t,n.head.appendChild(i)}var r=n.createElement("a");if(r.href=e,n.body.appendChild(r),r.href=r.href,":"===r.protocol||!/:/.test(r.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:r})},i=n.prototype;["hash","host","hostname","port","protocol","search"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return["append","delete","set"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),e},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e);var Hr,Wr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,f=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=h:((s=l.createElement("script")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==f(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw"LoadJS";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s},e.exports=n()}),zr=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Gr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Yr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Kr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Qr=function(){function e(t){zr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Gr(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(Xr.is.empty(n))return null;var i=JSON.parse(n);return Xr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Xr.is.object(t)){var n=this.get();Xr.is.empty(n)&&(n={}),Xr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),Jr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},$r={audio:"audio",video:"video"},Xr={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})},loadScript:function(e){return new Promise(function(t,n){Wr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Xr.is.string(e)){var n=Xr.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=Qr.supported,o=document.createElement("div");if(Xr.toggleHidden(o,!0),n&&o.setAttribute("id",t),r){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var s=JSON.parse(a);return void l.call(o,s.content)}}Xr.fetch(e).then(function(e){Xr.is.empty(e)||(r&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),l.call(o,e))}).catch(function(){})}}function l(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Xr.is.object(t)&&Xr.setAttributes(i,t),Xr.is.string(n)&&(i.innerText=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Xr.createElement(e,n,i))},removeElement:function(e){Xr.is.nodeList(e)||Xr.is.array(e)?Array.from(e).forEach(Xr.removeElement):Xr.is.element(e)&&Xr.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Xr.is.element(t)&&Xr.is.element(t.parentNode)&&Xr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Xr.is.element(e)&&!Xr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Kr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Xr.is.string(e)||Xr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Xr.is.object(i)&&Xr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n},toggleHidden:function(e,t){if(Xr.is.element(e)){var n=t;Xr.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if(Xr.is.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return null},hasClass:function(e,t){return Xr.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Xr.is.element(e)){var n=Xr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Xr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Xr.on(this.elements.container,"keydown",o,!1):Xr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Xr.is.empty(e)&&!Xr.is.empty(t)&&Xr.is.function(n))if(Xr.is.nodeList(e)||Xr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Xr.toggleListener.call(null,e,t,n,i,r,o)});else{var a=t.split(" "),s=o;Zr.passiveListeners&&(s={passive:r,capture:o}),a.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,s)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(Xr.is.element(e)&&!Xr.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Xr.is.array(e)||Xr.is.nodeList(e))Array.from(e).forEach(function(e){return Xr.toggleState(e,t)});else if(Xr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Xr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return Xr.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return Xr.is.string(n[t])?n[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Xr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),a=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(a)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Xr.replaceAll(e,"-"," "),e=Xr.replaceAll(e,"_"," "),e=Xr.toTitleCase(e),Xr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Xr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Xr.is.object(r)?(Object.keys(r).forEach(function(t){Xr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Yr({},t,{})),Xr.extend(e[t],r[t])):Object.assign(e,Yr({},t,r[t]))}),Xr.extend.apply(Xr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return Xr.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},getDeep:function(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)},closest:function(e,t){return Xr.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Jr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?Jr.vimeo:null},parseYouTubeId:function(e){if(Xr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Xr.is.empty(e))return null;if(Xr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Kr(n,2),r=i[0],o=i[1];return Object.assign(e,Yr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Xr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Xr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Xr.toggleHidden(e,!0),e.offsetHeight,Xr.toggleHidden(e,!1)},0)}},Zr={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Xr.getBrowser(),a=o.isIPhone&&n&&Zr.playsinline;switch(t+":"+e){case"html5:video":r=(i=Zr.video)&&Zr.rangeInput&&(!o.isIPhone||a);break;case"html5:audio":r=(i=Zr.audio)&&Zr.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=Zr.rangeInput&&(!o.isIPhone||a);break;default:r=(i=Zr.audio&&Zr.video)&&Zr.rangeInput}return{api:i,ui:r}},pip:!Xr.getBrowser().isIPhone&&Xr.is.function(Xr.createElement("video").webkitSetPresentationMode),airplay:Xr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Xr.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Hr=document.createElement("input"),Hr.type="range","range"===Hr.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Xr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},eo={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=eo.getSources.call(this);if(Xr.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!Xr.is.empty(e.getAttribute("size"))});return Xr.is.empty(t)?null:Xr.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=eo.getSources.call(e);if(Xr.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return Xr.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=eo.getSources.call(e);if(!Xr.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!Xr.is.empty(i)){var r=i.filter(function(t){return Zr.mime.call(e,t.getAttribute("type"))});if(!Xr.is.empty(r)){Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,a=e.playing;e.media.src=r[0].getAttribute("src");e.on("loadedmetadata",function t(){e.currentTime=o,e.off("loadedmetadata",t)}),e.media.load(),a&&e.play(),Xr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(Xr.removeElement(eo.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},to=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Xr.is.empty(e)||Xr.is.empty(t))return"";var n=Xr.getDeep(t.i18n,e);if(Xr.is.empty(n))return"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Kr(e,2),i=t[0],r=t[1];n=Xr.replaceAll(n,i,r)}),n},no=Xr.getBrowser(),io={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||no.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=Xr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Xr.getElements.call(this,this.config.selectors.buttons.play),pause:Xr.getElement.call(this,this.config.selectors.buttons.pause),restart:Xr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Xr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Xr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Xr.getElement.call(this,this.config.selectors.buttons.mute),pip:Xr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Xr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Xr.getElement.call(this,this.config.selectors.buttons.settings),captions:Xr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Xr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Xr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Xr.getElement.call(this,this.config.selectors.inputs.seek),volume:Xr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Xr.getElement.call(this,this.config.selectors.display.buffer),currentTime:Xr.getElement.call(this,this.config.selectors.display.currentTime),duration:Xr.getElement.call(this,this.config.selectors.display.duration)},Xr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=io.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Xr.setAttributes(r,Xr.extend(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",a):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),r.appendChild(o),r},createLabel:function(e,t){var n=to(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Xr.createElement("span",i,n)},createBadge:function(e){if(Xr.is.empty(e))return null;var t=Xr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Xr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Xr.createElement("button"),i=Object.assign({},t),r=Xr.toCamelCase(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,a="play",l="pause",s="play",c="pause";break;case"mute":o=!0,a="mute",l="unmute",s="volume",c="muted";break;case"captions":o=!0,a="enableCaptions",l="disableCaptions",s="captions-off",c="captions-on";break;case"fullscreen":o=!0,a="enterFullscreen",l="exitFullscreen",s="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",a="play",s="play";break;default:a=r,s=e}return o?(n.appendChild(io.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(io.createIcon.call(this,s,{class:"icon--not-pressed"})),n.appendChild(io.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(io.createLabel.call(this,a,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(io.createIcon.call(this,s)),n.appendChild(io.createLabel.call(this,a))),Xr.extend(i,Xr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Xr.setAttributes(n,i),"play"===r?(Xr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Xr.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},to(e,this.config)),i=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,io.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Xr.createElement("progress",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(Xr.createElement("span",null,"0"));var i="";switch(e){case"played":i=to("played",this.config);break;case"buffer":i=to("buffered",this.config)}n.innerText="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Xr.getAttributesFromSelector(this.config.selectors.display[e]),n=Xr.createElement("div",Xr.extend(t,{class:"plyr__time "+t.class,"aria-label":to(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],a=Xr.createElement("li"),s=Xr.createElement("label",{class:this.config.classNames.control}),l=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Xr.createElement("span",{hidden:""});s.appendChild(l),s.appendChild(c),s.insertAdjacentHTML("beforeend",i),Xr.is.element(r)&&s.appendChild(r),a.appendChild(s),t.appendChild(a)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Xr.is.element(e)&&Xr.is.number(t)){var i=Xr.getHours(this.duration)>0;e.innerText=Xr.formatTime(t,i,n)}},updateVolume:function(){this.supported.ui&&(Xr.is.element(this.elements.inputs.volume)&&io.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Xr.is.element(this.elements.buttons.mute)&&Xr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Xr.is.element(e)&&(e.value=t,io.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&Xr.is.event(e)){var n=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=Xr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&io.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":!function(e,n){var i=Xr.is.number(n)?n:0,r=Xr.is.element(e)?e:t.elements.display.buffer;if(Xr.is.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];Xr.is.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=Xr.is.event(e)?e.target:e;Xr.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),no.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Xr.is.element(this.elements.inputs.seek)&&Xr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){Xr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Xr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Xr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),io.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Xr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!Xr.is.element(this.elements.display.duration)&&this.config.invertTime;io.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||io.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=Xr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&io.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&io.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),io.updateSeekTooltip.call(this)}},toggleTab:function(e,t){Xr.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(Xr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Xr.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!Xr.is.empty(this.options.quality)&&this.options.quality.length>1;if(io.toggleTab.call(this,"quality",i),io.checkMenu.call(this),i){Xr.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=io.getLabel.call(t,"quality",e);io.createMenuItem.call(t,e,n,"quality",i,function(e){var n=to("qualityBadge."+e,t.config);return n.length?io.createBadge.call(t,n):null}(e))}),io.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?to("normal",this.config):t+"×";case"quality":if(Xr.is.number(t)){var n=to("qualityLabel."+t,this.config);return n.length?n:t+"p"}return Xr.toTitleCase(t);case"captions":return ro.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=Xr.is.empty(n)?this[e]:n,Xr.is.empty(r)&&(r=this.config[e].default),!Xr.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(Xr.is.element(o)||(o=i&&i.querySelector("ul")),Xr.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=io.getLabel.call(this,e,r);var a=o&&o.querySelector('input[value="'+r+'"]');Xr.is.element(a)&&(a.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=ro.getTracks.call(this).length;if(io.toggleTab.call(this,"captions",n),Xr.emptyElement(t),io.checkMenu.call(this),n){var i=ro.getTracks.call(this).map(function(t){return{language:Xr.is.empty(t.language)?"enabled":t.language,label:ro.getLabel.call(e,t)}});i.unshift({language:"",label:to("disabled",this.config)}),i.forEach(function(n){io.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?io.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.language)}),io.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Xr.is.element(this.elements.settings.panes.speed)){Xr.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!Xr.is.empty(this.options.speed)&&this.options.speed.length>1;if(io.toggleTab.call(this,"speed",n),io.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");Xr.emptyElement(i),this.options.speed.forEach(function(e){var n=io.getLabel.call(t,"speed",e);io.createMenuItem.call(t,e,i,"speed",n)}),io.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!Xr.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Xr.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Xr.is.element(t)&&Xr.is.element(n)){var i=Xr.is.boolean(e)?e:Xr.is.element(t)&&t.hasAttribute("hidden");if(Xr.is.event(e)){var r=Xr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Xr.is.element(n)&&n.setAttribute("aria-expanded",i),Xr.is.element(t)&&(Xr.toggleHidden(t,!i),Xr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Xr.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,n=document.getElementById(e);if(Xr.is.element(n)&&"tabpanel"===n.getAttribute("role")){var i=t.querySelector('[role="tabpanel"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+i.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Zr.transitions&&!Zr.reducedMotion){r.style.width=i.scrollWidth+"px",r.style.height=i.scrollHeight+"px";var o=io.getTabSize.call(this,n);Xr.on(r,Xr.transitionEndEvent,function e(t){t.target===r&&["width","height"].includes(t.propertyName)&&(r.style.width="",r.style.height="",Xr.off(r,Xr.transitionEndEvent,e))}),r.style.width=o.width+"px",r.style.height=o.height+"px"}Xr.toggleHidden(i,!0),i.setAttribute("tabindex",-1),Xr.toggleHidden(n,!1);var a=Xr.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(a).forEach(function(e){e.setAttribute("aria-expanded",!0)}),n.removeAttribute("tabindex"),n.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Xr.is.empty(this.config.controls))return null;var n=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(io.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(io.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(io.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(io.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.progress)),r=io.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(io.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Xr.createElement("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(io.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(io.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(io.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a=Xr.createElement("div",{class:"plyr__volume"}),s={max:1,step:.05,value:this.config.volume},l=io.createRange.call(this,"volume",Xr.extend(s,{id:"plyr-volume-"+e.id}));a.appendChild(l.label),a.appendChild(l.input),this.elements.volume=a,n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(io.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)){var c=Xr.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(io.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Xr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=Xr.createElement("div"),h=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),d=Xr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Xr.createElement("li",{role:"tab",hidden:""}),r=Xr.createElement("button",Xr.extend(Xr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),to(n,t.config)),o=Xr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),d.appendChild(i),t.elements.settings.tabs[n]=i}),h.appendChild(d),f.appendChild(h),this.config.settings.forEach(function(n){var i=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=Xr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},to(n,t.config));i.appendChild(r);var o=Xr.createElement("ul");i.appendChild(o),f.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(f),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Zr.pip&&n.appendChild(io.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Zr.airplay&&n.appendChild(io.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(io.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(io.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&io.setQualityMenu.call(this,eo.getQualityOptions.call(this)),io.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=io.getIconUrl.call(this);t.cors&&Xr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;Xr.is.string(this.config.controls)||Xr.is.element(this.config.controls)?n=this.config.controls:Xr.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=io.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:ro.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Kr(e,2),i=n[0],r=n[1];t=Xr.replaceAll(t,"{"+i+"}",r)}),t};r&&(Xr.is.string(this.config.controls)?n=o(n):Xr.is.element(n)&&(n.innerHTML=o(n.innerHTML)));var a=void 0;if(Xr.is.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),Xr.is.element(a)||(a=this.elements.container),Xr.is.element(n)?a.appendChild(n):n&&a.insertAdjacentHTML("beforeend",n),Xr.is.element(this.elements.controls)||io.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Xr.repaint(a),this.config.tooltips.controls){var s=Xr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){Xr.toggleClass(t,e.config.classNames.hidden,!1),Xr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},ro={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Zr.textTracks)Xr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&io.setCaptionsMenu.call(this);else{if(Xr.is.element(this.elements.captions)||(this.elements.captions=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.captions)),Xr.insertAfter(this.elements.captions,this.elements.wrapper)),Xr.getBrowser().isIE&&window.URL){var e=this.media.querySelectorAll("track");Array.from(e).forEach(function(e){var t=e.getAttribute("src"),n=Xr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Xr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Xr.removeElement(e)})})}var t=this.storage.get("captions");Xr.is.boolean(t)||(t=this.config.captions.active),this.toggleCaptions(t),this.config.captions.update&&Xr.on(this.media.textTracks,"addtrack removetrack",ro.update.bind(this)),setTimeout(ro.update.bind(this),0)}},update:function(){var e=ro.getTracks.call(this);if(this.options.captions=e.map(function(e){return e.language}),!this.language){var t=this.config.captions.language;if("auto"===t){var n=(navigator.language||navigator.userLanguage).split("-");t=Kr(n,1)[0]}this.language=this.storage.get("language")||(t||"").toLowerCase()}Xr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Xr.is.empty(ro.getTracks.call(this))),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&io.setCaptionsMenu.call(this)},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){ro.getTracks.call(this).forEach(function(t){Xr.on(t,"cuechange",function(t){return ro.setCue.call(e,t)}),t.mode="hidden"});var t=ro.getCurrentTrack.call(this);Xr.is.track(t)&&Array.from(t.activeCues||[]).length&&ro.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Xr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=ro.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=Xr.getElement.call(this,"track[default]")),n)||(n=Kr(t,1)[0]);return n},getLabel:function(e){var t=e;return!Xr.is.track(t)&&Zr.textTracks&&this.captions.active&&(t=ro.getCurrentTrack.call(this)),Xr.is.track(t)?Xr.is.empty(t.label)?Xr.is.empty(t.language)?to("enabled",this.config):e.language.toUpperCase():t.label:to("disabled",this.config)},setCue:function(e){var t=Xr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===ro.getCurrentTrack.call(this)&&(Xr.is.cue(i)?ro.setText.call(this,i.getCueAsHTML()):ro.setText.call(this,null),Xr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Xr.is.element(this.elements.captions)){var t=Xr.createElement("span");Xr.emptyElement(this.elements.captions);var n=Xr.is.nullOrUndefined(e)?"":e;Xr.is.string(n)?t.innerText=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")}},oo=function(){},ao=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];zr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Gr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):oo}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):oo}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):oo}}]),e}(),so={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.9/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},lo=Xr.getBrowser();function co(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Xr.is.element(e)&&Xr.toggleState(e,this.active),Xr.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),lo.isIos||Xr.trapFocus.call(this.player,this.target,this.active)}}function uo(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Xr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),co.call(this)}var fo=function(){function e(t){var n=this;zr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},Xr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){co.call(n)}),Xr.on(this.player.elements.container,"dblclick",function(e){Xr.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Gr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Xr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(lo.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Xr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():uo.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(lo.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Xr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else uo.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:Xr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return lo.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Xr.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!Xr.is.function(document[t+"ExitFullscreen"])&&!Xr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),ho=Xr.getBrowser(),po={addStyleHook:function(){Xr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Xr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void po.toggleNativeControls.call(this,!0);Xr.is.element(this.elements.controls)||(io.inject.call(this),this.listeners.controls()),po.toggleNativeControls.call(this),this.isHTML5&&ro.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,io.updateVolume.call(this),io.timeUpdate.call(this),po.checkPlaying.call(this),Xr.toggleClass(this.elements.container,this.config.classNames.pip.supported,Zr.pip&&this.isHTML5&&this.isVideo),Xr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Zr.airplay&&this.isHTML5),Xr.toggleClass(this.elements.container,this.config.classNames.isIos,ho.isIos),Xr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){Xr.dispatchEvent.call(e,e.media,"ready")},0),po.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&po.setPoster.call(this,this.poster),this.config.duration&&io.durationUpdate.call(this)},setTitle:function(){var e=to("play",this.config);if(Xr.is.string(this.config.title)&&!Xr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Xr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Xr.getElement.call(this,"iframe");if(!Xr.is.element(t))return;var n=Xr.is.empty(this.config.title)?"video":this.config.title,i=to("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!Xr.is.element(this.elements.poster))return Promise.reject();var n=Xr.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),po.togglePoster.call(t,!0),e});return n.catch(function(){return po.togglePoster.call(t,!1)}),n},checkPlaying:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Xr.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),Xr.toggleState(this.elements.buttons.play,this.playing),Xr.is.event(e)&&"timeupdate"===e.type||po.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Xr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),po.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},go=Xr.getBrowser(),mo=function(){function e(t){zr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Gr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Xr.is.number(n)){if(i){var o=Xr.getFocusElement();if(Xr.is.element(o)&&Xr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){io.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Xr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Xr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Xr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Xr.toggleListener(document.body,"click",this.toggleMenu,e),Xr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Xr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Xr.on(this.player.elements.container,"focusout",function(t){Xr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Xr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Xr.toggleClass(Xr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),Xr.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var n=e.player.elements.controls;"enterfullscreen"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(po.toggleControls.call(e.player,!0),i=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},i)})}},{key:"media",value:function(){var e=this;if(Xr.on(this.player.media,"timeupdate seeking seeked",function(t){return io.timeUpdate.call(e.player,t)}),Xr.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return io.durationUpdate.call(e.player,t)}),Xr.on(this.player.media,"loadeddata",function(){Xr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Xr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Xr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),Xr.on(this.player.media,"progress playing seeking seeked",function(t){return io.updateProgress.call(e.player,t)}),Xr.on(this.player.media,"volumechange",function(t){return io.updateVolume.call(e.player,t)}),Xr.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return po.checkPlaying.call(e.player,t)}),Xr.on(this.player.media,"waiting canplay seeked playing",function(t){return po.checkLoading.call(e.player,t)}),Xr.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Xr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Xr.is.element(t))return;Xr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Xr.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Xr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Xr.on(this.player.media,"ratechange",function(){io.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Xr.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),Xr.on(this.player.media,"qualitychange",function(t){io.updateSetting.call(e.player,"quality",null,t.detail.quality)}),Xr.on(this.player.media,"languagechange",function(){io.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Xr.on(this.player.media,"captionsenabled captionsdisabled",function(){io.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Xr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),Xr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=go.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;Xr.is.function(r)&&(o=r.call(e.player,t)),o&&Xr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=e.player.config.listeners[o],l=Xr.is.function(s);Xr.on(t,i,function(e){return n(e,r,o)},a&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){io.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var i=function(){var t="plyr-settings-"+e.player.id+"-home";io.showTab.call(e.player,t)};if(Xr.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.language=t.target.value,i()},"language");else if(Xr.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},"quality");else if(Xr.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},"speed");else{var r=t.target;io.showTab.call(e.player,r.getAttribute("aria-controls"))}}),i(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var n=e.player.elements.progress.getBoundingClientRect(),i=100/n.width*(t.pageX-n.left);t.currentTarget.setAttribute("seek-value",i)}),i(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var n=t.currentTarget,i=n.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(t.type);i&&r?(n.removeAttribute("play-on-seeked"),e.player.play()):!r&&e.player.playing&&(n.setAttribute("play-on-seeked",""),e.player.pause())}),i(this.player.elements.inputs.seek,t,function(t){var n=t.currentTarget,i=n.getAttribute("seek-value");Xr.is.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),e.player.currentTime=i/n.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Xr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,io.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),go.isWebkit&&i(Xr.getElements.call(this.player,'input[type="range"]'),"input",function(t){io.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return io.updateSeekTooltip.call(e.player,t)}),i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){var n=e.player,i=n.config,r=n.elements,o=n.timers;if(Xr.toggleClass(r.controls,i.classNames.noTransition,"focusin"===t.type),po.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){Xr.toggleClass(r.controls,i.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},a)}}),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function yo(e){this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var vo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),vo.setAspectRatio.call(this),Xr.is.object(window.Vimeo)?vo.ready.call(this):Xr.loadScript(this.config.urls.vimeo.sdk).then(function(){vo.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Xr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=Xr.buildUrlParams(n),r=t.media.getAttribute("src");Xr.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var o=Xr.parseVimeoId(r),a=Xr.createElement("iframe"),s=Xr.format(t.config.urls.vimeo.iframe,o,i);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=Xr.createElement("div",{class:t.config.classNames.embedContainer});l.appendChild(a),t.media=Xr.replaceElement(l,t.media),Xr.fetch(Xr.format(t.config.urls.vimeo.api,o),"json").then(function(e){if(!Xr.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",po.setPoster.call(t,n.href)}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return yo.call(t,!0),t.embed.play()},t.media.pause=function(){return yo.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume;i.seeking=!0,Xr.dispatchEvent.call(t,i,"seeking"),Promise.resolve(r&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return r&&n.pause()}).then(function(){return r&&n.setVolume(o)}).catch(function(){})}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Xr.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&io.setSpeedMenu.call(t,[])})}});var f=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return f},set:function(e){t.embed.setVolume(e).then(function(){f=e,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var n=!!Xr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){h=n,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var d=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return d},set:function(e){var n=Xr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){d=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Xr.getAspectRatio(t[0],t[1]);vo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,po.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,ro.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Xr.stripHTML(e.cues[0].text)),ro.setText.call(t,n)}),t.embed.on("loaded",function(){Xr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){yo.call(t,!0),Xr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){yo.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Xr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Xr.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,Xr.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Xr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return po.build.call(t)},0)}};function bo(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function wo(e){this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var Eo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Eo.setAspectRatio.call(this),Xr.is.object(window.YT)&&Xr.is.function(window.YT.Player)?Eo.ready.call(this):(Xr.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Eo.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Xr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Xr.is.empty(n))return this.config.title=n,void po.setTitle.call(this)}var i=this.config.keys.google;if(Xr.is.string(i)&&!Xr.is.empty(i)){var r=Xr.format(this.config.urls.youtube.api,e,i);Xr.fetch(r).then(function(e){Xr.is.object(e)&&(t.config.title=e.items[0].snippet.title,po.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Xr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Xr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Xr.parseYouTubeId(n),r=Xr.generateId(e.provider),o=Xr.createElement("div",{id:r});e.media=Xr.replaceElement(o,e.media);var a=function(e){return"https://img.youtube.com/vi/"+i+"/"+e+"default.jpg"};Xr.loadImage(a("maxres"),121).catch(function(){return Xr.loadImage(a("sd"),121)}).catch(function(){return Xr.loadImage(a("hq"))}).then(function(t){return po.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Xr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Xr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){Xr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Xr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Eo.getTitle.call(e,i),e.media.play=function(){wo.call(e,!0),n.playVideo()},e.media.pause=function(){wo.call(e,!1),n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,Xr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return bo(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(bo(i)),Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Xr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Xr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Xr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Xr.dispatchEvent.call(e,e.media,"timeupdate"),Xr.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Xr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Xr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return po.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,Xr.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:Xr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),Xr.dispatchEvent.call(e,e.media,"progress");break;case 0:wo.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):Xr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused?e.media.pause():(wo.call(e,!0),Xr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Xr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),Xr.dispatchEvent.call(e,e.media,"durationchange")),io.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),Xr.is.empty(n)?n:Xr.dedupe(n.map(function(e){return bo(e)})))));break;case 2:e.muted||e.embed.unMute(),wo.call(e,!1)}Xr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},ko={setup:function(){if(this.media)if(Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Xr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=Xr.createElement("div",{class:this.config.classNames.video}),Xr.wrap(this.media,this.elements.wrapper),this.elements.poster=Xr.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":Eo.setup.call(this);break;case"vimeo":vo.setup.call(this)}else this.isHTML5&&eo.extend.call(this);else this.debug.warn("No media element found!")}},So=function(){function e(t){var n=this;zr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Gr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Xr.is.object(window.google)&&Xr.is.object(window.google.ima)?this.ready():Xr.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Xr.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Xr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=to("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),Xr.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(Xr.is.element(n)){var i=100/t.player.duration*e,r=Xr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Xr.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;Xr.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Xr.is.array(o)&&o.forEach(function(e){Xr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Xr.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Xr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!Xr.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Xr.buildUrlParams(e)}}]),e}(),To={insertElements:function(e,t){var n=this;Xr.is.string(t)?Xr.insertElement(e,this.media,{src:t}):Xr.is.array(t)&&t.forEach(function(t){Xr.insertElement(e,n.media,t)})},change:function(e){var t=this;Xr.is.object(e)&&"sources"in e&&e.sources.length?(eo.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],Xr.removeElement(t.media),t.media=null,Xr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Xr.is.empty(e.sources[0].provider)?Jr.html5:e.sources[0].provider,t.supported=Zr.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=Xr.createElement("video");break;case"html5:audio":t.media=Xr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Xr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Xr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),Xr.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),po.addStyleHook.call(t),t.isHTML5&&To.insertElements.call(t,"source",e.sources),t.config.title=e.title,ko.setup.call(t),t.isHTML5&&("tracks"in e&&To.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&po.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Ao=function(){function e(t,n){var i=this;if(zr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Zr.touch,this.media=t,Xr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Xr.is.nodeList(this.media)||Xr.is.array(this.media))&&(this.media=this.media[0]),this.config=Xr.extend({},so,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new ao(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Zr),!Xr.is.nullOrUndefined(this.media)&&Xr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Zr.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null,l=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),Xr.is.element(a)){if(s=a.getAttribute("src"),this.provider=Xr.getProviderByUrl(s),this.elements.container=this.media,this.media=a,this.elements.container.className="",l=Xr.getUrlParams(s),!Xr.is.empty(l)){var c=["1","true"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Xr.is.empty(this.provider)||!Object.keys(Jr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=$r.video;break;case"video":case"audio":this.type=o,this.provider=Jr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Zr.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new mo(this),this.storage=new Qr(this),this.media.plyr=this,Xr.is.element(this.elements.container)||(this.elements.container=Xr.createElement("div"),Xr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),po.addStyleHook.call(this),ko.setup.call(this),this.config.debug&&Xr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&po.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new fo(this),this.ads=new So(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Gr(e,[{key:"play",value:function(){return Xr.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&Xr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Xr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):Xr.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Xr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Xr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Xr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Xr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=Xr.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);Xr.toggleState(this.elements.buttons.captions,t),Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,t),t!==this.captions.active&&(this.captions.active=t,Xr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Zr.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Xr.hasClass(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Xr.toggleClass(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)&&io.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";Xr.dispatchEvent.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Xr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Xr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Xr.removeElement(t.elements.buttons.play),Xr.removeElement(t.elements.captions),Xr.removeElement(t.elements.controls),Xr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Xr.is.function(e)&&e()):(t.listeners.clear(),Xr.replaceElement(t.elements.original,t.elements.container),Xr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Xr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),po.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Xr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return Zr.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Jr.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Jr.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Jr.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===$r.video)}},{key:"isAudio",get:function(){return Boolean(this.type===$r.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=Xr.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Xr.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration||0;return e||t}},{key:"volume",set:function(e){var t=e;Xr.is.string(t)&&(t=Number(t)),Xr.is.number(t)||(t=this.storage.get("volume")),Xr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!Xr.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Xr.is.boolean(t)||(t=this.storage.get("muted")),Xr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Xr.is.number(e)&&(t=e),Xr.is.number(t)||(t=this.storage.get("speed")),Xr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(Xr.is.empty(e)||(t=Number(e)),Xr.is.number(t)||(t=this.storage.get("quality")),Xr.is.number(t)||(t=this.config.quality.selected),Xr.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=Xr.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Xr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){To.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?po.setPoster.call(this,e):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Xr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(Xr.is.string(e))if(Xr.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,ro.setText.call(this,null),ro.setLanguage.call(this),Xr.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Zr.pip){var i=Xr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Zr.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Zr.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Xr.loadSprite(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return Xr.is.string(t)?i=Array.from(document.querySelectorAll(t)):Xr.is.nodeList(t)?i=Array.from(t):Xr.is.array(t)&&(i=t.filter(function(e){return Xr.is.element(e)})),Xr.is.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return Ao.defaults=Xr.cloneDeep(so),Ao}); //# sourceMappingURL=plyr.polyfilled.min.js.map diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map index 725f1bc0..d9e6dccd 100644 --- a/dist/plyr.polyfilled.min.js.map +++ b/dist/plyr.polyfilled.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","push","mode","copyright","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","navigator","_userAgent","userAgent","task","microtask","head","last","notify","flush","parent","domain","exit","enter","standalone","then","toggle","node","createTextNode","observe","characterData","versions","v8","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","Storage","player","enabled","config","storage","supported","localStorage","getItem","utils","json","parse","extend","setItem","removeItem","providers","types","input","Boolean","nullOrUndefined","instanceof","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","responseType","request","XMLHttpRequest","responseText","response","statusText","send","minWidth","image","Image","naturalWidth","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","content","fetch","injectSprite","innerHTML","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","innerText","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","force","classList","contains","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","dispatchEvent","toggleState","pressed","getAttribute","_len","_key","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","defineProperty$1","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","i18n","seekTime","title","controls","cors","iconUrl","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","_this7","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","setLanguage","setCue","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","isEmbed","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","Player","autopause","disableTextTrack","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","insertElement","cancelRequests","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"8YACA,IAAIA,EAASC,EAAAC,QAAkC,oBAAVC,QAAyBA,OAAOC,MAAQA,KACzED,OAAwB,oBAARE,MAAuBA,KAAKD,MAAQA,KAAOC,KAE3DC,SAAS,cAATA,GACc,iBAAPC,MAAiBA,IAAMP,qBCLlC,IAAIQ,EAAOP,EAAAC,SAAmBO,QAAS,SACrB,iBAAPC,MAAiBA,IAAMF,KCDlCG,aAAiB,SAAUC,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,ICAvDC,EAAiB,SAAUD,GACzB,IAAKE,EAASF,GAAK,MAAMG,UAAUH,EAAK,sBACxC,OAAOA,GCHTI,EAAiB,SAAUC,GACzB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,ICHXC,GAAkBC,EAAoB,WACpC,OAA+E,GAAxEC,OAAOC,kBAAmB,KAAOC,IAAK,WAAc,OAAO,KAAQC,ICDxEC,EAAWL,EAAqBK,SAEhCC,EAAKZ,EAASW,IAAaX,EAASW,EAASE,eACjDC,EAAiB,SAAUhB,GACzB,OAAOc,EAAKD,EAASE,cAAcf,OCLrCiB,GAAkBT,IAA8BU,EAAoB,WAClE,OAA4G,GAArGT,OAAOC,eAAeS,EAAyB,OAAQ,KAAOR,IAAK,WAAc,OAAO,KAAQC,ICGzGQ,EAAiB,SAAUpB,EAAIqB,GAC7B,IAAKnB,EAASF,GAAK,OAAOA,EAC1B,IAAIsB,EAAIC,EACR,GAAIF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACzF,GAAgC,mBAApBD,EAAKtB,EAAG0B,WAA2BxB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACnF,IAAKF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EAC1F,MAAMpB,UAAU,4CCPdwB,EAAKlB,OAAOC,oBAEJF,EAA4BC,OAAOC,eAAiB,SAAwBkB,EAAGC,EAAGC,GAI5F,GAHAC,EAASH,GACTC,EAAIG,EAAYH,GAAG,GACnBE,EAASD,GACLG,EAAgB,IAClB,OAAON,EAAGC,EAAGC,EAAGC,GAChB,MAAOxB,IACT,GAAI,QAASwB,GAAc,QAASA,EAAY,MAAM3B,UAAU,4BAEhE,MADI,UAAW2B,IAAYF,EAAEC,GAAKC,EAAWI,OACtCN,ICdTO,EAAiB,SAAUC,EAAQF,GACjC,OACEG,aAAuB,EAATD,GACdE,eAAyB,EAATF,GAChBG,WAAqB,EAATH,GACZF,MAAOA,ICHXM,EAAiBhC,EAA4B,SAAUiC,EAAQC,EAAKR,GAClE,OAAOP,EAAGgB,EAAEF,EAAQC,EAAKE,EAAW,EAAGV,KACrC,SAAUO,EAAQC,EAAKR,GAEzB,OADAO,EAAOC,GAAOR,EACPO,GCNLI,KAAoBA,eACxBC,EAAiB,SAAU9C,EAAI0C,GAC7B,OAAOG,EAAepB,KAAKzB,EAAI0C,ICF7BK,EAAK,EACLC,EAAKxD,KAAKyD,SACdC,EAAiB,SAAUR,GACzB,MAAO,UAAUS,YAAeC,IAARV,EAAoB,GAAKA,EAAK,QAASK,EAAKC,GAAIxB,SAAS,sBCAnF,IAAI6B,EAAM7C,EAAkB,OAExB8C,EAAY5D,SAAkB,SAC9B6D,GAAO,GAAKD,GAAWE,MAFX,YAIhBtC,EAAmBuC,cAAgB,SAAUzD,GAC3C,OAAOsD,EAAU7B,KAAKzB,KAGvBX,EAAAC,QAAiB,SAAUsC,EAAGc,EAAKnB,EAAKmC,GACvC,IAAIC,EAA2B,mBAAPpC,EACpBoC,IAAYC,EAAIrC,EAAK,SAAWsC,EAAKtC,EAAK,OAAQmB,IAClDd,EAAEc,KAASnB,IACXoC,IAAYC,EAAIrC,EAAK8B,IAAQQ,EAAKtC,EAAK8B,EAAKzB,EAAEc,GAAO,GAAKd,EAAEc,GAAOa,EAAIO,KAAKC,OAAOrB,MACnFd,IAAMxC,EACRwC,EAAEc,GAAOnB,EACCmC,EAGD9B,EAAEc,GACXd,EAAEc,GAAOnB,EAETsC,EAAKjC,EAAGc,EAAKnB,WALNK,EAAEc,GACTmB,EAAKjC,EAAGc,EAAKnB,OAOd7B,SAASsE,UAxBI,WAwBkB,WAChC,MAAsB,mBAARC,MAAsBA,KAAKZ,IAAQC,EAAU7B,KAAKwC,UC7BlEC,EAAiB,SAAUlE,GACzB,GAAiB,mBAANA,EAAkB,MAAMG,UAAUH,EAAK,uBAClD,OAAOA,GCATmE,EAAiB,SAAU7C,EAAI8C,EAAMC,GAEnC,GADAC,EAAUhD,QACG8B,IAATgB,EAAoB,OAAO9C,EAC/B,OAAQ+C,GACN,KAAK,EAAG,OAAO,SAAUzD,GACvB,OAAOU,EAAGG,KAAK2C,EAAMxD,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAG2D,GAC1B,OAAOjD,EAAGG,KAAK2C,EAAMxD,EAAG2D,IAE1B,KAAK,EAAG,OAAO,SAAU3D,EAAG2D,EAAGC,GAC7B,OAAOlD,EAAGG,KAAK2C,EAAMxD,EAAG2D,EAAGC,IAG/B,OAAO,WACL,OAAOlD,EAAGmD,MAAML,EAAMM,aCVtBC,EAAU,SAAUC,EAAMC,EAAMC,GAClC,IAQIpC,EAAKqC,EAAKC,EAAKC,EARfC,EAAYN,EAAOD,EAAQQ,EAC3BC,EAAYR,EAAOD,EAAQU,EAC3BC,EAAYV,EAAOD,EAAQtD,EAC3BkE,EAAWX,EAAOD,EAAQ9C,EAC1B2D,EAAUZ,EAAOD,EAAQc,EACzBC,EAASN,EAAYhG,EAASkG,EAAYlG,EAAOyF,KAAUzF,EAAOyF,QAAezF,EAAOyF,QAAsB,UAC9GvF,EAAU8F,EAAYxF,EAAOA,EAAKiF,KAAUjF,EAAKiF,OACjDc,EAAWrG,EAAiB,YAAMA,EAAiB,cAGvD,IAAKoD,KADD0C,IAAWN,EAASD,GACZC,EAIVE,IAFAD,GAAOG,GAAaQ,QAA0BtC,IAAhBsC,EAAOhD,IAExBgD,EAASZ,GAAQpC,GAE9BuC,EAAMO,GAAWT,EAAMa,EAAIZ,EAAK5F,GAAUmG,GAA0B,mBAAPP,EAAoBY,EAAIlG,SAAS+B,KAAMuD,GAAOA,EAEvGU,GAAQG,EAASH,EAAQhD,EAAKsC,EAAKJ,EAAOD,EAAQmB,GAElDxG,EAAQoD,IAAQsC,GAAKnB,EAAKvE,EAASoD,EAAKuC,GACxCM,GAAYI,EAASjD,IAAQsC,IAAKW,EAASjD,GAAOsC,IAG1D5F,EAAOQ,KAAOA,EAEd+E,EAAQQ,EAAI,EACZR,EAAQU,EAAI,EACZV,EAAQtD,EAAI,EACZsD,EAAQ9C,EAAI,EACZ8C,EAAQc,EAAI,GACZd,EAAQoB,EAAI,GACZpB,EAAQmB,EAAI,GACZnB,EAAQqB,EAAI,IC1BZ,ID2BA,ICjCIC,EDiCJC,EAAiBvB,ECvCbwB,EAAQC,EAAI,eACZC,EAAOD,EAAI,QACXE,KAASlH,EAAOmH,cAAenH,EAAOoH,UACtCC,EAASH,EACTI,EAAI,EAIJC,EAAyB,iHAE3BnD,MAAM,KAEDkD,EAPC,IAQFT,EAAQ7G,EAAOuH,EAAuBD,QACxC7C,EAAKoC,EAAMjC,UAAWmC,GAAO,GAC7BtC,EAAKoC,EAAMjC,UAAWqC,GAAM,IACvBI,GAAS,EAGlB,IAAAG,GACEN,IAAKA,EACLG,OAAQA,EACRN,MAAOA,EACPE,KAAMA,GCzBRQ,EAAiB,SAAUnB,EAAQoB,EAAKpD,GACtC,IAAK,IAAIhB,KAAOoE,EAAKjB,EAASH,EAAQhD,EAAKoE,EAAIpE,GAAMgB,GACrD,OAAOgC,GCHTqB,EAAiB,SAAU/G,EAAIgH,EAAanC,EAAMoC,GAChD,KAAMjH,aAAcgH,SAAoC5D,IAAnB6D,GAAgCA,KAAkBjH,EACrF,MAAMG,UAAU0E,EAAO,2BACvB,OAAO7E,GCFPkH,EAAO1H,KAAK0H,KACZC,EAAQ3H,KAAK2H,MACjBC,EAAiB,SAAUpH,GACzB,OAAOqH,MAAMrH,GAAMA,GAAM,GAAKA,EAAK,EAAImH,EAAQD,GAAMlH,ICFnDsH,EAAM9H,KAAK8H,IACfC,EAAiB,SAAUvH,GACzB,OAAOA,EAAK,EAAIsH,EAAIE,EAAUxH,GAAK,kBAAoB,GCDzDyH,EAAiB,SAAUzH,GACzB,QAAWoD,IAAPpD,EAAkB,OAAO,EAC7B,IAAI0H,EAASF,EAAUxH,GACnBqE,EAASsD,EAASD,GACtB,GAAIA,IAAWrD,EAAQ,MAAMuD,WAAW,iBACxC,OAAOvD,GCRL7C,KAAcA,SAElBqG,EAAiB,SAAU7H,GACzB,OAAOwB,EAASC,KAAKzB,GAAI8H,MAAM,GAAI,ICArCC,EAAiBtH,OAAO,KAAKuH,qBAAqB,GAAKvH,OAAS,SAAUT,GACxE,MAAkB,UAAXiI,EAAIjI,GAAkBA,EAAGwD,MAAM,IAAM/C,OAAOT,ICHrDkI,EAAiB,SAAUlI,GACzB,GAAUoD,MAANpD,EAAiB,MAAMG,UAAU,yBAA2BH,GAChE,OAAOA,GCATmI,EAAiB,SAAUnI,GACzB,OAAOoI,EAAQC,EAAQrI,KCHrBsI,EAAM9I,KAAK8I,IACXhB,EAAM9H,KAAK8H,IACfiB,EAAiB,SAAUC,EAAOnE,GAEhC,OADAmE,EAAQhB,EAAUgB,IACH,EAAIF,EAAIE,EAAQnE,EAAQ,GAAKiD,EAAIkB,EAAOnE,ICAzDoE,EAAiB,SAAUC,GACzB,OAAO,SAAUC,EAAOC,EAAIC,GAC1B,IAGI3G,EAHAN,EAAIkH,EAAUH,GACdtE,EAASsD,EAAS/F,EAAEyC,QACpBmE,EAAQO,EAAgBF,EAAWxE,GAIvC,GAAIqE,GAAeE,GAAMA,GAAI,KAAOvE,EAASmE,GAG3C,IAFAtG,EAAQN,EAAE4G,OAEGtG,EAAO,OAAO,OAEtB,KAAMmC,EAASmE,EAAOA,IAAS,IAAIE,GAAeF,KAAS5G,IAC5DA,EAAE4G,KAAWI,EAAI,OAAOF,GAAeF,GAAS,EACpD,OAAQE,IAAgB,oBClB9B,IACIM,EAAQ5J,EADC,wBACkBA,EADlB,2BAGZC,EAAAC,QAAiB,SAAUoD,EAAKR,GAC/B,OAAO8G,EAAMtG,KAASsG,EAAMtG,QAAiBU,IAAVlB,EAAsBA,QACxD,eAAgB+G,MACjBpJ,QAASD,EAAKC,QACdqJ,KAAuC,SACvCC,UAAW,2CCVTC,EAAS5I,EAAqB,QAElC6I,GAAiB,SAAU3G,GACzB,OAAO0G,EAAO1G,KAAS0G,EAAO1G,GAAO0D,EAAI1D,KCDvC4G,GAAe9I,GAA6B,GAC5C+I,GAAWrI,GAAyB,YAExCsI,GAAiB,SAAU/G,EAAQgH,GACjC,IAGI/G,EAHAd,EAAIkH,EAAUrG,GACdiE,EAAI,EACJgD,KAEJ,IAAKhH,KAAOd,EAAOc,GAAO6G,IAAU3F,EAAIhC,EAAGc,IAAQgH,EAAOT,KAAKvG,GAE/D,KAAO+G,EAAMpF,OAASqC,GAAO9C,EAAIhC,EAAGc,EAAM+G,EAAM/C,SAC7C4C,GAAaI,EAAQhH,IAAQgH,EAAOT,KAAKvG,IAE5C,OAAOgH,GCdTC,GAAiB,gGAEfnG,MAAM,KCDJoG,GAAapJ,GAA4B2C,OAAO,SAAU,mBAElD1C,OAAOoJ,qBAAuB,SAA6BjI,GACrE,OAAOkI,GAAMlI,EAAGgI,MCHlBG,GAAiB,SAAU/J,GACzB,OAAOS,OAAO4H,EAAQrI,KCExBgK,GAAiB,SAAc9H,GAO7B,IANA,IAAIN,EAAIqI,GAAShG,MACbI,EAASsD,EAAS/F,EAAEyC,QACpB6F,EAAOxF,UAAUL,OACjBmE,EAAQO,EAAgBmB,EAAO,EAAIxF,UAAU,QAAKtB,EAAWiB,GAC7D8F,EAAMD,EAAO,EAAIxF,UAAU,QAAKtB,EAChCgH,OAAiBhH,IAAR+G,EAAoB9F,EAAS0E,EAAgBoB,EAAK9F,GACxD+F,EAAS5B,GAAO5G,EAAE4G,KAAWtG,EACpC,OAAON,oBCbT,IAAIoH,EAAQxI,EAAqB,OAE7B6J,EAASnJ,EAAqBmJ,OAC9BC,EAA8B,mBAAVD,GAEThL,EAAAC,QAAiB,SAAUuF,GACxC,OAAOmE,EAAMnE,KAAUmE,EAAMnE,GAC3ByF,GAAcD,EAAOxF,KAAUyF,EAAaD,EAASjE,GAAK,UAAYvB,MAGjEmE,MAAQA,ICVbuB,GAAM/J,EAAwBmC,EAE9B6H,GAAMtJ,GAAkB,eAE5BuJ,GAAiB,SAAUzK,EAAI0K,EAAKC,GAC9B3K,IAAO4D,EAAI5D,EAAK2K,EAAO3K,EAAKA,EAAGgE,UAAWwG,KAAMD,GAAIvK,EAAIwK,IAAOlI,cAAc,EAAMJ,MAAOwI,wBCOhG,IAAIE,EAAOpK,GAA0BmC,EACjChB,EAAKT,EAAwByB,EAK7BkI,EAAY,YAEZC,EAAc,eACdC,EAAe3L,EAAmB,YAClC4L,EAAY5L,EAAgB,SAC5BI,EAAOJ,EAAOI,KACdoI,EAAaxI,EAAOwI,WAEpBqD,EAAW7L,EAAO6L,SAClBC,EAAaH,EACbI,EAAM3L,EAAK2L,IACXC,EAAM5L,EAAK4L,IACXjE,EAAQ3H,EAAK2H,MACbkE,EAAM7L,EAAK6L,IACXC,EAAM9L,EAAK8L,IAIXC,EAAUC,EAAc,KAHf,SAITC,EAAUD,EAAc,KAHV,aAIdE,EAAUF,EAAc,KAHV,aAMlB,SAASG,EAAYzJ,EAAO0J,EAAMC,GAChC,IAOIvL,EAAGwL,EAAGtH,EAPNuH,EAAS,IAAIC,MAAMH,GACnBI,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAc,KAATR,EAAcR,EAAI,GAAI,IAAMA,EAAI,GAAI,IAAM,EAC/C1E,EAAI,EACJ2F,EAAInK,EAAQ,GAAe,IAAVA,GAAe,EAAIA,EAAQ,EAAI,EAAI,EAkCxD,KAhCAA,EAAQiJ,EAAIjJ,KAECA,GAASA,IAAU+I,GAE9Ba,EAAI5J,GAASA,EAAQ,EAAI,EACzB5B,EAAI4L,IAEJ5L,EAAI6G,EAAMkE,EAAInJ,GAASoJ,GACnBpJ,GAASsC,EAAI4G,EAAI,GAAI9K,IAAM,IAC7BA,IACAkE,GAAK,IAGLtC,GADE5B,EAAI6L,GAAS,EACNC,EAAK5H,EAEL4H,EAAKhB,EAAI,EAAG,EAAIe,IAEf3H,GAAK,IACflE,IACAkE,GAAK,GAEHlE,EAAI6L,GAASD,GACfJ,EAAI,EACJxL,EAAI4L,GACK5L,EAAI6L,GAAS,GACtBL,GAAK5J,EAAQsC,EAAI,GAAK4G,EAAI,EAAGQ,GAC7BtL,GAAQ6L,IAERL,EAAI5J,EAAQkJ,EAAI,EAAGe,EAAQ,GAAKf,EAAI,EAAGQ,GACvCtL,EAAI,IAGDsL,GAAQ,EAAGG,EAAOrF,KAAW,IAAJoF,EAASA,GAAK,IAAKF,GAAQ,GAG3D,IAFAtL,EAAIA,GAAKsL,EAAOE,EAChBG,GAAQL,EACDK,EAAO,EAAGF,EAAOrF,KAAW,IAAJpG,EAASA,GAAK,IAAK2L,GAAQ,GAE1D,OADAF,IAASrF,IAAU,IAAJ2F,EACRN,EAET,SAASO,EAAcP,EAAQH,EAAMC,GACnC,IAOIC,EAPAG,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBK,EAAQN,EAAO,EACfvF,EAAImF,EAAS,EACbQ,EAAIN,EAAOrF,KACXpG,EAAQ,IAAJ+L,EAGR,IADAA,IAAM,EACCE,EAAQ,EAAGjM,EAAQ,IAAJA,EAAUyL,EAAOrF,GAAIA,IAAK6F,GAAS,GAIzD,IAHAT,EAAIxL,GAAK,IAAMiM,GAAS,EACxBjM,KAAOiM,EACPA,GAASX,EACFW,EAAQ,EAAGT,EAAQ,IAAJA,EAAUC,EAAOrF,GAAIA,IAAK6F,GAAS,GACzD,GAAU,IAANjM,EACFA,EAAI,EAAI6L,MACH,CAAA,GAAI7L,IAAM4L,EACf,OAAOJ,EAAIU,IAAMH,GAAKpB,EAAWA,EAEjCa,GAAQV,EAAI,EAAGQ,GACftL,GAAQ6L,EACR,OAAQE,GAAK,EAAI,GAAKP,EAAIV,EAAI,EAAG9K,EAAIsL,GAGzC,SAASa,EAAUC,GACjB,OAAOA,EAAM,IAAM,GAAKA,EAAM,IAAM,GAAKA,EAAM,IAAM,EAAIA,EAAM,GAEjE,SAASC,EAAO3M,GACd,OAAa,IAALA,GAEV,SAAS4M,EAAQ5M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,KAE/B,SAAS6M,EAAQ7M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,IAAMA,GAAM,GAAK,IAAMA,GAAM,GAAK,KAEjE,SAAS8M,EAAQ9M,GACf,OAAO2L,EAAY3L,EAAI,GAAI,GAE7B,SAAS+M,EAAQ/M,GACf,OAAO2L,EAAY3L,EAAI,GAAI,GAG7B,SAASgN,EAAUC,EAAGvK,EAAKwK,GACzBvL,EAAGsL,EAAEpC,GAAYnI,GAAO/B,IAAK,WAAc,OAAOsD,KAAKiJ,MAGzD,SAASvM,EAAIwM,EAAMT,EAAOlE,EAAO4E,GAC/B,IACIC,EAAWC,GADC9E,GAEhB,GAAI6E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM7D,EAAWkD,GACvD,IAAI9B,EAAQmE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOzE,EAAMlB,MAAM0F,EAAOA,EAAQd,GACtC,OAAOU,EAAiBK,EAAOA,EAAKC,UAEtC,SAASC,EAAIR,EAAMT,EAAOlE,EAAOoF,EAAY1L,EAAOkL,GAClD,IACIC,EAAWC,GADC9E,GAEhB,GAAI6E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM7D,EAAWkD,GAIvD,IAHA,IAAI9B,EAAQmE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOG,GAAY1L,GACdwE,EAAI,EAAGA,EAAIgG,EAAOhG,IAAKsC,EAAMwE,EAAQ9G,GAAK+G,EAAKL,EAAiB1G,EAAIgG,EAAQhG,EAAI,GAG3F,GAAKmH,EAAOvH,IAgFL,CACL,IAAKwH,EAAM,WACT/C,EAAa,OACR+C,EAAM,WACX,IAAI/C,GAAc,MACd+C,EAAM,WAIV,OAHA,IAAI/C,EACJ,IAAIA,EAAa,KACjB,IAAIA,EAAayB,KApOF,eAqORzB,EAAalG,OAClB,CAMF,IADA,IACyCnC,EADrCqL,GAJJhD,EAAe,SAAqB1G,GAElC,OADA2J,EAAW/J,KAAM8G,GACV,IAAIG,EAAWoC,EAAQjJ,MAEIwG,GAAaK,EAAWL,GACnDoD,EAAOrD,EAAKM,GAAagD,EAAI,EAAQD,EAAK5J,OAAS6J,IACnDxL,EAAMuL,EAAKC,QAASnD,GAAelH,EAAKkH,EAAcrI,EAAKwI,EAAWxI,IAEjEqL,EAAiBI,YAAcpD,EAG/C,IAAIoC,EAAO,IAAInC,EAAU,IAAID,EAAa,IACtCqD,EAAWpD,EAAUH,GAAWwD,QACpClB,EAAKkB,QAAQ,EAAG,YAChBlB,EAAKkB,QAAQ,EAAG,aACZlB,EAAKmB,QAAQ,IAAOnB,EAAKmB,QAAQ,IAAIC,EAAYvD,EAAUH,IAC7DwD,QAAS,SAAiBG,EAAYtM,GACpCkM,EAAS3M,KAAKwC,KAAMuK,EAAYtM,GAAS,IAAM,KAEjDuM,SAAU,SAAkBD,EAAYtM,GACtCkM,EAAS3M,KAAKwC,KAAMuK,EAAYtM,GAAS,IAAM,OAEhD,QAhHH6I,EAAe,SAAqB1G,GAClC2J,EAAW/J,KAAM8G,EA9IF,eA+If,IAAI2D,EAAapB,EAAQjJ,GACzBJ,KAAKsJ,GAAKoB,GAAUlN,KAAK,IAAIuK,MAAM0C,GAAa,GAChDzK,KAAKwH,GAAWiD,GAGlB1D,EAAY,SAAkBe,EAAQyC,EAAYE,GAChDV,EAAW/J,KAAM+G,EApJL,YAqJZgD,EAAWjC,EAAQhB,EArJP,YAsJZ,IAAI6D,EAAe7C,EAAON,GACtBoD,EAASrH,EAAUgH,GACvB,GAAIK,EAAS,GAAKA,EAASD,EAAc,MAAMhH,EAAW,iBAE1D,GAAIiH,GADJH,OAA4BtL,IAAfsL,EAA2BE,EAAeC,EAASlH,EAAS+G,IAC/CE,EAAc,MAAMhH,EAxJ/B,iBAyJf3D,KAAKsH,GAAWQ,EAChB9H,KAAKyH,GAAWmD,EAChB5K,KAAKwH,GAAWiD,GAGdlD,IACFwB,EAAUjC,EAhJI,aAgJuB,MACrCiC,EAAUhC,EAlJD,SAkJoB,MAC7BgC,EAAUhC,EAlJI,aAkJoB,MAClCgC,EAAUhC,EAlJI,aAkJoB,OAGpCuD,EAAYvD,EAAUH,IACpByD,QAAS,SAAiBE,GACxB,OAAO7N,EAAIsD,KAAM,EAAGuK,GAAY,IAAM,IAAM,IAE9CM,SAAU,SAAkBN,GAC1B,OAAO7N,EAAIsD,KAAM,EAAGuK,GAAY,IAElCO,SAAU,SAAkBP,GAC1B,IAAI9B,EAAQ/L,EAAIsD,KAAM,EAAGuK,EAAY9J,UAAU,IAC/C,OAAQgI,EAAM,IAAM,EAAIA,EAAM,KAAO,IAAM,IAE7CsC,UAAW,SAAmBR,GAC5B,IAAI9B,EAAQ/L,EAAIsD,KAAM,EAAGuK,EAAY9J,UAAU,IAC/C,OAAOgI,EAAM,IAAM,EAAIA,EAAM,IAE/BuC,SAAU,SAAkBT,GAC1B,OAAO/B,EAAU9L,EAAIsD,KAAM,EAAGuK,EAAY9J,UAAU,MAEtDwK,UAAW,SAAmBV,GAC5B,OAAO/B,EAAU9L,EAAIsD,KAAM,EAAGuK,EAAY9J,UAAU,OAAS,GAE/DyK,WAAY,SAAoBX,GAC9B,OAAOlC,EAAc3L,EAAIsD,KAAM,EAAGuK,EAAY9J,UAAU,IAAK,GAAI,IAEnE0K,WAAY,SAAoBZ,GAC9B,OAAOlC,EAAc3L,EAAIsD,KAAM,EAAGuK,EAAY9J,UAAU,IAAK,GAAI,IAEnE2J,QAAS,SAAiBG,EAAYtM,GACpCyL,EAAI1J,KAAM,EAAGuK,EAAY7B,EAAQzK,IAEnCuM,SAAU,SAAkBD,EAAYtM,GACtCyL,EAAI1J,KAAM,EAAGuK,EAAY7B,EAAQzK,IAEnCmN,SAAU,SAAkBb,EAAYtM,GACtCyL,EAAI1J,KAAM,EAAGuK,EAAY5B,EAAS1K,EAAOwC,UAAU,KAErD4K,UAAW,SAAmBd,EAAYtM,GACxCyL,EAAI1J,KAAM,EAAGuK,EAAY5B,EAAS1K,EAAOwC,UAAU,KAErD6K,SAAU,SAAkBf,EAAYtM,GACtCyL,EAAI1J,KAAM,EAAGuK,EAAY3B,EAAS3K,EAAOwC,UAAU,KAErD8K,UAAW,SAAmBhB,EAAYtM,GACxCyL,EAAI1J,KAAM,EAAGuK,EAAY3B,EAAS3K,EAAOwC,UAAU,KAErD+K,WAAY,SAAoBjB,EAAYtM,GAC1CyL,EAAI1J,KAAM,EAAGuK,EAAYzB,EAAS7K,EAAOwC,UAAU,KAErDgL,WAAY,SAAoBlB,EAAYtM,GAC1CyL,EAAI1J,KAAM,EAAGuK,EAAY1B,EAAS5K,EAAOwC,UAAU,OAsCzDiL,GAAe5E,EA/PI,eAgQnB4E,GAAe3E,EA/PC,YAgQhBnH,EAAKmH,EAAUH,GAAYgD,EAAOxH,MAAM,GACxC/G,EAAoB,YAAIyL,EACxBzL,EAAiB,SAAI0L,IChRjB4E,GAAUpP,GAAkB,WAChCqP,GAAiB,SAAUjO,EAAGkO,GAC5B,IACIzO,EADA4L,EAAIlL,EAASH,GAAGuM,YAEpB,YAAa/K,IAAN6J,GAAiD7J,OAA7B/B,EAAIU,EAASkL,GAAG2C,KAAyBE,EAAIxL,EAAUjD,ICHhFuO,GAAUpP,GAAkB,WAEhCuP,GAAiB,SAAUC,GACzB,IAAI/C,EAAI7N,EAAO4Q,GACXxE,GAAeyB,IAAMA,EAAE2C,KAAUjO,EAAGgB,EAAEsK,EAAG2C,IAC3CtN,cAAc,EACd3B,IAAK,WAAc,OAAOsD,SCF1BsC,GAAc/F,EAAqB+F,YAEnCwE,GAAegB,GAAOxF,YACtByE,GAAYe,GAAOvF,SACnByJ,GAAUpC,EAAOvH,KAAOC,GAAY2J,OACpCC,GAASpF,GAAa/G,UAAU8D,MAChCzB,GAAOwH,EAAOxH,KAGlB1B,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKoB,KAAgBwE,KAAiBxE,YAAawE,KAE3FpG,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK0I,EAAOpH,OAJrB,eAMjByJ,OAAQ,SAAgBlQ,GACtB,OAAOiQ,IAAWA,GAAQjQ,IAAOE,EAASF,IAAOqG,MAAQrG,KAI7D2E,EAAQA,EAAQ9C,EAAI8C,EAAQmB,EAAInB,EAAQQ,EAAIjE,EAAoB,WAC9D,OAAQ,IAAI6J,GAAa,GAAGjD,MAAM,OAAG1E,GAAWsL,aAZ/B,eAejB5G,MAAO,SAAe0F,EAAOrD,GAC3B,QAAe/G,IAAX+M,SAAgC/M,IAAR+G,EAAmB,OAAOgG,GAAO1O,KAAKM,EAASkC,MAAOuJ,GAQlF,IAPA,IAAI4C,EAAMrO,EAASkC,MAAMyK,WACrB2B,EAAQtH,EAAgByE,EAAO4C,GAC/BE,EAAQvH,OAAwB3F,IAAR+G,EAAoBiG,EAAMjG,EAAKiG,GACvD1G,EAAS,IAAK6G,GAAmBtM,KAAM8G,IAA9B,CAA6CpD,EAAS2I,EAAQD,IACvEG,EAAQ,IAAIxF,GAAU/G,MACtBwM,EAAQ,IAAIzF,GAAUtB,GACtBlB,EAAQ,EACL6H,EAAQC,GACbG,EAAMhC,SAASjG,IAASgI,EAAM1B,SAASuB,MACvC,OAAO3G,KAIbvI,GA9BmB,eCbnB,IAAIqJ,GAAMhK,GAAkB,eAExBkQ,GAAkD,aAA5CzI,EAAI,WAAc,OAAOvD,UAArB,IASdiM,GAAiB,SAAU3Q,GACzB,IAAI4B,EAAGgP,EAAGnL,EACV,YAAcrC,IAAPpD,EAAmB,YAAqB,OAAPA,EAAc,OAEN,iBAApC4Q,EAVD,SAAU5Q,EAAI0C,GACzB,IACE,OAAO1C,EAAG0C,GACV,MAAOpC,KAOOuQ,CAAOjP,EAAInB,OAAOT,GAAKwK,KAAoBoG,EAEvDF,GAAMzI,EAAIrG,GAEM,WAAf6D,EAAIwC,EAAIrG,KAAsC,mBAAZA,EAAEkP,OAAuB,YAAcrL,GCrBhFsL,MCEIC,GAAWxQ,GAAkB,YAC7ByQ,GAAajF,MAAMhI,UAEvBkN,GAAiB,SAAUlR,GACzB,YAAcoD,IAAPpD,IAAqBmR,GAAUnF,QAAUhM,GAAMiR,GAAWD,MAAchR,ICFjFoR,GAAiB3Q,OAAOwN,MAAQ,SAAcrM,GAC5C,OAAOkI,GAAMlI,EAAGyP,KCDlBC,GAAiB9Q,EAA4BC,OAAO8Q,iBAAmB,SAA0B3P,EAAG4P,GAClGzP,EAASH,GAKT,IAJA,IAGIC,EAHAoM,EAAOwD,GAAQD,GACfnN,EAAS4J,EAAK5J,OACdqC,EAAI,EAEDrC,EAASqC,GAAG/E,EAAGgB,EAAEf,EAAGC,EAAIoM,EAAKvH,KAAM8K,EAAW3P,IACrD,OAAOD,GCXLf,GAAWL,EAAqBK,SACpC6Q,GAAiB7Q,IAAYA,GAAS8Q,gBCGlCpI,GAAW/I,GAAyB,YACpCoR,GAAQ,aAIRC,GAAa,WAEf,IAIIC,EAJAC,EAAS7Q,EAAyB,UAClCwF,EAAI2K,GAAYhN,OAcpB,IAVA0N,EAAOC,MAAMC,QAAU,OACvB9Q,GAAmB+Q,YAAYH,GAC/BA,EAAOjL,IAAM,eAGbgL,EAAiBC,EAAOI,cAActR,UACvBuR,OACfN,EAAeO,MAAMC,uCACrBR,EAAeS,QACfV,GAAaC,EAAe3M,EACrBuB,YAAYmL,GAAoB,UAAER,GAAY3K,IACrD,OAAOmL,MAGTW,GAAiB/R,OAAOgS,QAAU,SAAgB7Q,EAAG4P,GACnD,IAAI9H,EAQJ,OAPU,OAAN9H,GACFgQ,GAAe,UAAI7P,EAASH,GAC5B8H,EAAS,IAAIkI,GACbA,GAAe,UAAI,KAEnBlI,EAAOH,IAAY3H,GACd8H,EAASmI,UACMzO,IAAfoO,EAA2B9H,EAASgJ,GAAIhJ,EAAQ8H,ICpCrDjI,GAAW/I,GAAyB,YACpCmS,GAAclS,OAAOuD,UAEzB4O,GAAiBnS,OAAOoS,gBAAkB,SAAUjR,GAElD,OADAA,EAAIqI,GAASrI,GACTgC,EAAIhC,EAAG2H,IAAkB3H,EAAE2H,IACH,mBAAjB3H,EAAEuM,aAA6BvM,aAAaA,EAAEuM,YAChDvM,EAAEuM,YAAYnK,UACdpC,aAAanB,OAASkS,GAAc,MCV3C3B,GAAWxQ,GAAkB,YAEjCsS,GAAiB5R,EAAmB6R,kBAAoB,SAAU/S,GAChE,GAAUoD,MAANpD,EAAiB,OAAOA,EAAGgR,KAC1BhR,EAAG,eACHmR,GAAU6B,GAAQhT,KCJzBiT,GAAiBjH,MAAMkH,SAAW,SAAiBC,GACjD,MAAmB,SAAZlL,EAAIkL,ICDTvD,GAAUpP,GAAkB,WCChC4S,GAAiB,SAAUC,EAAUhP,GACnC,OAAO,IDAQ,SAAUgP,GACzB,IAAIpG,EASF,OAREiG,GAAQG,KAGM,mBAFhBpG,EAAIoG,EAASlF,cAEkBlB,IAAMjB,QAASkH,GAAQjG,EAAEjJ,aAAaiJ,OAAI7J,GACrElD,EAAS+M,IAED,QADVA,EAAIA,EAAE2C,OACU3C,OAAI7J,SAETA,IAAN6J,EAAkBjB,MAAQiB,ECV5B,CAAwBoG,GAAxB,CAAmChP,ICQ5CiP,GAAiB,SAAUC,EAAMC,GAC/B,IAAIC,EAAiB,GAARF,EACTG,EAAoB,GAARH,EACZI,EAAkB,GAARJ,EACVK,EAAmB,GAARL,EACXM,EAAwB,GAARN,EAChBO,EAAmB,GAARP,GAAaM,EACxBpB,EAASe,GAAWO,GACxB,OAAO,SAAUpL,EAAOqL,EAAY5P,GAQlC,IAPA,IAMI7C,EAAK0S,EANLrS,EAAIqI,GAAStB,GACblJ,EAAO2I,EAAQxG,GACfe,EAAIiD,EAAIoO,EAAY5P,EAAM,GAC1BC,EAASsD,EAASlI,EAAK4E,QACvBmE,EAAQ,EACRkB,EAAS+J,EAAShB,EAAO9J,EAAOtE,GAAUqP,EAAYjB,EAAO9J,EAAO,QAAKvF,EAEvEiB,EAASmE,EAAOA,IAAS,IAAIsL,GAAYtL,KAAS/I,KAEtDwU,EAAMtR,EADNpB,EAAM9B,EAAK+I,GACEA,EAAO5G,GAChB2R,GACF,GAAIE,EAAQ/J,EAAOlB,GAASyL,OACvB,GAAIA,EAAK,OAAQV,GACpB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAOhS,EACf,KAAK,EAAG,OAAOiH,EACf,KAAK,EAAGkB,EAAOT,KAAK1H,QACf,GAAIqS,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWlK,ICxC7DwK,GAAc1T,GAAkB,eAChCyQ,GAAajF,MAAMhI,UACQZ,MAA3B6N,GAAWiD,KAA2BhT,EAAmB+P,GAAYiD,OACzE,IAAAC,GAAiB,SAAUzR,GACzBuO,GAAWiD,IAAaxR,IAAO,GCLjC0R,GAAiB,SAAUC,EAAMnS,GAC/B,OAASA,MAAOA,EAAOmS,OAAQA,ICG7BC,MAGJ9T,EAAmB8T,GAAmBpT,GAAkB,YAAa,WAAc,OAAO+C,OAE1F,IAAAsQ,GAAiB,SAAUvN,EAAawN,EAAMC,GAC5CzN,EAAYhD,UAAYyO,GAAO6B,IAAqBG,KAAMC,EAAW,EAAGD,KACxE9E,GAAe3I,EAAawN,EAAO,cCFjCxD,GAAWxQ,GAAkB,YAC7BmU,QAAa1G,MAAQ,WAAaA,QAKlC2G,GAAa,WAAc,OAAO3Q,MAEtC4Q,GAAiB,SAAUC,EAAMN,EAAMxN,EAAayN,EAAMM,EAASC,EAAQC,GACzEC,GAAYlO,EAAawN,EAAMC,GAC/B,IAeIU,EAASzS,EAAK4R,EAfdc,EAAY,SAAUC,GACxB,IAAKV,IAASU,KAAQC,EAAO,OAAOA,EAAMD,GAC1C,OAAQA,GACN,IAVK,OAWL,IAVO,SAUM,OAAO,WAAoB,OAAO,IAAIrO,EAAY/C,KAAMoR,IACrE,OAAO,WAAqB,OAAO,IAAIrO,EAAY/C,KAAMoR,KAEzD7K,EAAMgK,EAAO,YACbe,EAdO,UAcMR,EACbS,GAAa,EACbF,EAAQR,EAAK9Q,UACbyR,EAAUH,EAAMtE,KAAasE,EAnBjB,eAmBuCP,GAAWO,EAAMP,GACpEW,EAAWD,GAAWL,EAAUL,GAChCY,EAAWZ,EAAWQ,EAAwBH,EAAU,WAArBM,OAAkCtS,EACrEwS,EAAqB,SAARpB,GAAkBc,EAAMO,SAAqBJ,EAwB9D,GArBIG,IACFtB,EAAoBzB,GAAe+C,EAAWnU,KAAK,IAAIqT,OAC7BrU,OAAOuD,WAAasQ,EAAkBG,OAE9D9E,GAAe2E,EAAmB9J,GAAK,GAEe,mBAA/B8J,EAAkBtD,KAAyBnN,EAAKyQ,EAAmBtD,GAAU4D,KAIpGW,GAAcE,GAjCP,WAiCkBA,EAAQ5Q,OACnC2Q,GAAa,EACbE,EAAW,WAAoB,OAAOD,EAAQhU,KAAKwC,SAGxB0Q,IAASa,IAAeF,EAAMtE,MACzDnN,EAAKyR,EAAOtE,GAAU0E,GAGxBvE,GAAUqD,GAAQkB,EAClBvE,GAAU3G,GAAOoK,GACbG,EAMF,GALAI,GACEW,OAAQP,EAAaG,EAAWN,EA9CzB,UA+CPnH,KAAM+G,EAASU,EAAWN,EAhDrB,QAiDLS,QAASF,GAEPV,EAAQ,IAAKvS,KAAOyS,EAChBzS,KAAO4S,GAAQzP,EAASyP,EAAO5S,EAAKyS,EAAQzS,SAC7CiC,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAKwP,IAASa,GAAahB,EAAMW,GAEtE,OAAOA,GCzDTY,GAAiBvV,GAA0BwL,MAAO,QAAS,SAAUgK,EAAUX,GAC7EpR,KAAKgS,GAAKnN,EAAUkN,GACpB/R,KAAKiS,GAAK,EACVjS,KAAKkS,GAAKd,GAET,WACD,IAAIzT,EAAIqC,KAAKgS,GACTZ,EAAOpR,KAAKkS,GACZ3N,EAAQvE,KAAKiS,KACjB,OAAKtU,GAAK4G,GAAS5G,EAAEyC,QACnBJ,KAAKgS,QAAK7S,EACHgT,GAAK,IAEaA,GAAK,EAApB,QAARf,EAA+B7M,EACvB,UAAR6M,EAAiCzT,EAAE4G,IACvBA,EAAO5G,EAAE4G,MACxB,UAGH2I,GAAUkF,UAAYlF,GAAUnF,MAEhCsK,GAAiB,QACjBA,GAAiB,UACjBA,GAAiB,WCjCjB,IAAItF,GAAWxQ,GAAkB,YAC7B+V,IAAe,EAEnB,KACe,GAAGvF,MACF,OAAI,WAAcuF,IAAe,GAG/C,MAAOjW,IAET,IAAAkW,GAAiB,SAAUnW,EAAMoW,GAC/B,IAAKA,IAAgBF,GAAc,OAAO,EAC1C,IAAI7S,GAAO,EACX,IACE,IAAIgT,GAAO,GACPC,EAAOD,EAAI1F,MACf2F,EAAKlC,KAAO,WAAc,OAASJ,KAAM3Q,GAAO,IAChDgT,EAAI1F,IAAY,WAAc,OAAO2F,GACrCtW,EAAKqW,GACL,MAAOpW,IACT,OAAOoD,GCdTkT,MAAoBC,YAAc,SAAoBnR,EAAkB8H,GACtE,IAAI5L,EAAIqI,GAAShG,MACbmM,EAAMzI,EAAS/F,EAAEyC,QACjByS,EAAK/N,EAAgBrD,EAAQ0K,GAC7B2G,EAAOhO,EAAgByE,EAAO4C,GAC9BjG,EAAMzF,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAC5C4T,EAAQxX,KAAK8H,UAAalE,IAAR+G,EAAoBiG,EAAMrH,EAAgBoB,EAAKiG,IAAQ2G,EAAM3G,EAAM0G,GACrFG,EAAM,EAMV,IALIF,EAAOD,GAAMA,EAAKC,EAAOC,IAC3BC,GAAO,EACPF,GAAQC,EAAQ,EAChBF,GAAME,EAAQ,GAETA,KAAU,GACXD,KAAQnV,EAAGA,EAAEkV,GAAMlV,EAAEmV,UACbnV,EAAEkV,GACdA,GAAMG,EACNF,GAAQE,EACR,OAAOrV,YCxBIoG,sBCMXkP,GAAOzW,OAAO0W,+BAEN3W,EAA4B0W,GAAO,SAAkCtV,EAAGC,GAGlF,GAFAD,EAAIkH,EAAUlH,GACdC,EAAIG,EAAYH,GAAG,GACfI,EAAgB,IAClB,OAAOiV,GAAKtV,EAAGC,GACf,MAAOvB,IACT,GAAIsD,EAAIhC,EAAGC,GAAI,OAAOe,GAAYwU,GAAIzU,EAAElB,KAAKG,EAAGC,GAAID,EAAEC,uBCdxD,GACIrB,EAA2B,CAC7B,IACIpB,EAAS+B,EACT2M,EAAQuJ,EACR1S,EAAU2S,EACVzJ,EAAS0J,EACTC,EAAUC,GACV7R,EAAM8R,EACN1J,EAAa2J,EACbC,EAAeC,EACfhU,EAAOiU,EACPvJ,EAAcwJ,EACdvQ,EAAYwQ,EACZrQ,EAAWsQ,EACX3K,EAAU4K,EACVnP,EAAkBoP,EAClBnW,EAAcoW,EACdxU,EAAMyU,EACNrF,EAAUsF,GACVpY,EAAWqY,EACXtO,EAAWuO,GACXC,EAAcC,GACdjG,EAASkG,GACT9F,EAAiB+F,GACjBhO,EAAOiO,GAA0BlW,EACjCmW,EAAYC,GACZ3S,EAAM4S,EACNC,EAAMC,GACNC,EAAoBC,GACpBC,EAAsBC,EACtB/I,EAAqBgJ,GACrBC,EAAiBC,GACjBtI,EAAYuI,GACZC,EAAcC,GACdC,EAAaC,GACbnL,GAAYoL,GACZC,GAAkBC,GAClBC,GAAMC,EACNC,GAAQC,GACR1Y,GAAKuY,GAAIvX,EACTuU,GAAOkD,GAAMzX,EACbiF,GAAaxI,EAAOwI,WACpBzH,GAAYf,EAAOe,UACnBma,GAAalb,EAAOkb,WAKpBrJ,GAAajF,MAAe,UAC5BjB,GAAeyM,EAAQjR,YACvByE,GAAYwM,EAAQhR,SACpB+T,GAAepB,EAAkB,GACjCqB,GAAcrB,EAAkB,GAChCsB,GAAYtB,EAAkB,GAC9BuB,GAAavB,EAAkB,GAC/BwB,GAAYxB,EAAkB,GAC9ByB,GAAiBzB,EAAkB,GACnC0B,GAAgBxB,GAAoB,GACpC/P,GAAe+P,GAAoB,GACnCyB,GAActB,EAAe1D,OAC7BiF,GAAYvB,EAAevL,KAC3B+M,GAAexB,EAAe3D,QAC9BoF,GAAmBhK,GAAWiK,YAC9BC,GAAclK,GAAWmK,OACzBC,GAAmBpK,GAAWqK,YAC9BC,GAAYtK,GAAWnN,KACvB0X,GAAYvK,GAAWwK,KACvBC,GAAazK,GAAWnJ,MACxB6T,GAAgB1K,GAAWzP,SAC3Boa,GAAsB3K,GAAW4K,eACjC7K,GAAWiI,EAAI,YACfzO,GAAMyO,EAAI,eACV6C,GAAoB1V,EAAI,qBACxB2V,GAAkB3V,EAAI,mBACtB4V,GAAmBnO,EAAOpH,OAC1BwV,GAAcpO,EAAO1H,MACrBE,GAAOwH,EAAOxH,KAGd6V,GAAO/C,EAAkB,EAAG,SAAUvX,EAAGyC,GAC3C,OAAO8X,GAAS5L,EAAmB3O,EAAGA,EAAEma,KAAmB1X,KAGzD+X,GAAgBtO,EAAM,WAExB,OAA0D,IAAnD,IAAIwM,GAAW,IAAI+B,aAAa,IAAItQ,QAAQ,KAGjDuQ,KAAehC,MAAgBA,GAAoB,UAAE3M,KAAOG,EAAM,WACpE,IAAIwM,GAAW,GAAG3M,UAGhB4O,GAAW,SAAUvc,EAAIwc,GAC3B,IAAI3N,EAASrH,EAAUxH,GACvB,GAAI6O,EAAS,GAAKA,EAAS2N,EAAO,MAAM5U,GAAW,iBACnD,OAAOiH,GAGL4N,GAAW,SAAUzc,GACvB,GAAIE,EAASF,IAAOic,MAAejc,EAAI,OAAOA,EAC9C,MAAMG,GAAUH,EAAK,2BAGnBmc,GAAW,SAAUlP,EAAG5I,GAC1B,KAAMnE,EAAS+M,IAAM6O,MAAqB7O,GACxC,MAAM9M,GAAU,wCAChB,OAAO,IAAI8M,EAAE5I,IAGbqY,GAAkB,SAAU9a,EAAG+a,GACjC,OAAOC,GAASrM,EAAmB3O,EAAGA,EAAEma,KAAmBY,IAGzDC,GAAW,SAAU3P,EAAG0P,GAI1B,IAHA,IAAInU,EAAQ,EACRnE,EAASsY,EAAKtY,OACdqF,EAASyS,GAASlP,EAAG5I,GAClBA,EAASmE,GAAOkB,EAAOlB,GAASmU,EAAKnU,KAC5C,OAAOkB,GAGLsD,GAAY,SAAUhN,EAAI0C,EAAKwK,GACjCvL,GAAG3B,EAAI0C,GAAO/B,IAAK,WAAc,OAAOsD,KAAK4Y,GAAG3P,OAG9C4P,GAAQ,SAAchY,GACxB,IAKI4B,EAAGrC,EAAQyR,EAAQpM,EAAQ0M,EAAM2G,EALjCnb,EAAIqI,EAASnF,GACboF,EAAOxF,UAAUL,OACjB2Y,EAAQ9S,EAAO,EAAIxF,UAAU,QAAKtB,EAClC6Z,OAAoB7Z,IAAV4Z,EACVE,EAASpE,EAAUlX,GAEvB,GAAcwB,MAAV8Z,IAAwBzE,EAAYyE,GAAS,CAC/C,IAAKH,EAAWG,EAAOzb,KAAKG,GAAIkU,KAAapP,EAAI,IAAK0P,EAAO2G,EAAStI,QAAQJ,KAAM3N,IAClFoP,EAAO7M,KAAKmN,EAAKlU,OACjBN,EAAIkU,EAGR,IADImH,GAAW/S,EAAO,IAAG8S,EAAQpX,EAAIoX,EAAOtY,UAAU,GAAI,IACrDgC,EAAI,EAAGrC,EAASsD,EAAS/F,EAAEyC,QAASqF,EAASyS,GAASlY,KAAMI,GAASA,EAASqC,EAAGA,IACpFgD,EAAOhD,GAAKuW,EAAUD,EAAMpb,EAAE8E,GAAIA,GAAK9E,EAAE8E,GAE3C,OAAOgD,GAGLyT,GAAM,WAIR,IAHA,IAAI3U,EAAQ,EACRnE,EAASK,UAAUL,OACnBqF,EAASyS,GAASlY,KAAMI,GACrBA,EAASmE,GAAOkB,EAAOlB,GAAS9D,UAAU8D,KACjD,OAAOkB,GAIL0T,KAAkB9C,IAAcxM,EAAM,WAAc8N,GAAoBna,KAAK,IAAI6Y,GAAW,MAE5F+C,GAAkB,WACpB,OAAOzB,GAAoBnX,MAAM2Y,GAAgB1B,GAAWja,KAAKgb,GAASxY,OAASwY,GAASxY,MAAOS,YAGjG4Q,IACFuB,WAAY,SAAoBnR,EAAQ8H,GACtC,OAAOwM,GAAgBvY,KAAKgb,GAASxY,MAAOyB,EAAQ8H,EAAO9I,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEnGka,MAAO,SAAetJ,GACpB,OAAO0G,GAAW+B,GAASxY,MAAO+P,EAAYtP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEtFma,KAAM,SAAcrb,GAClB,OAAOyM,GAAUlK,MAAMgY,GAASxY,MAAOS,YAEzC8Y,OAAQ,SAAgBxJ,GACtB,OAAO0I,GAAgBzY,KAAMuW,GAAYiC,GAASxY,MAAO+P,EACvDtP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAE1Cqa,KAAM,SAAcC,GAClB,OAAO/C,GAAU8B,GAASxY,MAAOyZ,EAAWhZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEpFua,UAAW,SAAmBD,GAC5B,OAAO9C,GAAe6B,GAASxY,MAAOyZ,EAAWhZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEzFwa,QAAS,SAAiB5J,GACxBuG,GAAakC,GAASxY,MAAO+P,EAAYtP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEjFya,QAAS,SAAiBC,GACxB,OAAOxU,GAAamT,GAASxY,MAAO6Z,EAAepZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3F2a,SAAU,SAAkBD,GAC1B,OAAOjD,GAAc4B,GAASxY,MAAO6Z,EAAepZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE5FU,KAAM,SAAcka,GAClB,OAAOzC,GAAU9W,MAAMgY,GAASxY,MAAOS,YAEzCwW,YAAa,SAAqB4C,GAChC,OAAO7C,GAAiBxW,MAAMgY,GAASxY,MAAOS,YAEhDuZ,IAAK,SAAajB,GAChB,OAAOd,GAAKO,GAASxY,MAAO+Y,EAAOtY,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3EgY,OAAQ,SAAgBpH,GACtB,OAAOmH,GAAY1W,MAAMgY,GAASxY,MAAOS,YAE3C4W,YAAa,SAAqBtH,GAChC,OAAOqH,GAAiB5W,MAAMgY,GAASxY,MAAOS,YAEhDgJ,QAAS,WAMP,IALA,IAIIxL,EAHAmC,EAASoY,GADFxY,MACiBI,OACxB6Z,EAAS1e,KAAK2H,MAAM9C,EAAS,GAC7BmE,EAAQ,EAELA,EAAQ0V,GACbhc,EANS+B,KAMIuE,GANJvE,KAOJuE,KAPIvE,OAOcI,GAPdJ,KAQJI,GAAUnC,EACf,OATS+B,MAWbka,KAAM,SAAcnK,GAClB,OAAOyG,GAAUgC,GAASxY,MAAO+P,EAAYtP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAErFqY,KAAM,SAAc2C,GAClB,OAAO5C,GAAU/Z,KAAKgb,GAASxY,MAAOma,IAExCC,SAAU,SAAkBC,EAAOnU,GACjC,IAAIvI,EAAI6a,GAASxY,MACbI,EAASzC,EAAEyC,OACXka,EAASxV,EAAgBuV,EAAOja,GACpC,OAAO,IAAKkM,EAAmB3O,EAAGA,EAAEma,KAA7B,CACLna,EAAEmK,OACFnK,EAAE4M,WAAa+P,EAAS3c,EAAE4c,kBAC1B7W,QAAkBvE,IAAR+G,EAAoB9F,EAAS0E,EAAgBoB,EAAK9F,IAAWka,MAKzEpO,GAAS,SAAe3C,EAAOrD,GACjC,OAAOuS,GAAgBzY,KAAMyX,GAAWja,KAAKgb,GAASxY,MAAOuJ,EAAOrD,KAGlEsU,GAAO,SAAaC,GACtBjC,GAASxY,MACT,IAAI4K,EAAS0N,GAAS7X,UAAU,GAAI,GAChCL,EAASJ,KAAKI,OACdyC,EAAMmD,EAASyU,GACftO,EAAMzI,EAASb,EAAIzC,QACnBmE,EAAQ,EACZ,GAAI4H,EAAMvB,EAASxK,EAAQ,MAAMuD,GAvKhB,iBAwKjB,KAAOY,EAAQ4H,GAAKnM,KAAK4K,EAASrG,GAAS1B,EAAI0B,MAG7CmW,IACF9I,QAAS,WACP,OAAOmF,GAAavZ,KAAKgb,GAASxY,QAEpCgK,KAAM,WACJ,OAAO8M,GAAUtZ,KAAKgb,GAASxY,QAEjC6R,OAAQ,WACN,OAAOgF,GAAYrZ,KAAKgb,GAASxY,SAIjC2a,GAAY,SAAUlZ,EAAQhD,GAChC,OAAOxC,EAASwF,IACXA,EAAOuW,KACO,iBAAPvZ,GACPA,KAAOgD,GACP3B,QAAQrB,IAAQqB,OAAOrB,IAE1Bmc,GAAW,SAAkCnZ,EAAQhD,GACvD,OAAOkc,GAAUlZ,EAAQhD,EAAMV,EAAYU,GAAK,IAC5CkV,EAAa,EAAGlS,EAAOhD,IACvBwU,GAAKxR,EAAQhD,IAEfoc,GAAW,SAAwBpZ,EAAQhD,EAAKqc,GAClD,QAAIH,GAAUlZ,EAAQhD,EAAMV,EAAYU,GAAK,KACxCxC,EAAS6e,IACTnb,EAAImb,EAAM,WACTnb,EAAImb,EAAM,QACVnb,EAAImb,EAAM,QAEVA,EAAKzc,cACJsB,EAAImb,EAAM,cAAeA,EAAKxc,UAC9BqB,EAAImb,EAAM,gBAAiBA,EAAK1c,WAI9BV,GAAG+D,EAAQhD,EAAKqc,IAFvBrZ,EAAOhD,GAAOqc,EAAK7c,MACZwD,IAINsW,KACH5B,GAAMzX,EAAIkc,GACV3E,GAAIvX,EAAImc,IAGVna,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK6W,GAAkB,UACjD7E,yBAA0B0H,GAC1Bne,eAAgBoe,KAGdhR,EAAM,WAAc6N,GAAcla,aACpCka,GAAgBC,GAAsB,WACpC,OAAOL,GAAU9Z,KAAKwC,QAI1B,IAAI+a,GAAwBzQ,KAAgB+G,IAC5C/G,EAAYyQ,GAAuBL,IACnC9a,EAAKmb,GAAuBhO,GAAU2N,GAAW7I,QACjDvH,EAAYyQ,IACVlX,MAAOqI,GACPxC,IAAK8Q,GACLtQ,YAAa,aACb3M,SAAUma,GACVE,eAAgBwB,KAElBrQ,GAAUgS,GAAuB,SAAU,KAC3ChS,GAAUgS,GAAuB,aAAc,KAC/ChS,GAAUgS,GAAuB,aAAc,KAC/ChS,GAAUgS,GAAuB,SAAU,KAC3Crd,GAAGqd,GAAuBxU,IACxB7J,IAAK,WAAc,OAAOsD,KAAKgY,OAIjC5c,EAAAC,QAAiB,SAAU0Q,EAAKwM,EAAOyC,EAASC,GAE9C,IAAI1K,EAAOxE,IADXkP,IAAYA,GACgB,UAAY,IAAM,QAC1CC,EAAS,MAAQnP,EACjBoP,EAAS,MAAQpP,EACjBqP,EAAajgB,EAAOoV,GACpBM,EAAOuK,MACPC,EAAMD,GAAcxM,EAAewM,GACnCpK,GAAUoK,IAAexR,EAAOvH,IAChC1E,KACA2d,EAAsBF,GAAcA,EAAoB,UAUxDG,EAAa,SAAUpb,EAAMoE,GAC/B7G,GAAGyC,EAAMoE,GACP7H,IAAK,WACH,OAZO,SAAUyD,EAAMoE,GAC3B,IAAIiX,EAAOrb,EAAKyY,GAChB,OAAO4C,EAAKC,EAAEP,GAAQ3W,EAAQgU,EAAQiD,EAAKE,EAAGvD,IAUnCwD,CAAO3b,KAAMuE,IAEtBmF,IAAK,SAAUzL,GACb,OAXO,SAAUkC,EAAMoE,EAAOtG,GAClC,IAAIud,EAAOrb,EAAKyY,GACZqC,IAAShd,GAASA,EAAQ1C,KAAKqgB,MAAM3d,IAAU,EAAI,EAAIA,EAAQ,IAAO,IAAe,IAARA,GACjFud,EAAKC,EAAEN,GAAQ5W,EAAQgU,EAAQiD,EAAKE,EAAGzd,EAAOka,IAQnC0D,CAAO7b,KAAMuE,EAAOtG,IAE7BG,YAAY,KAGZ4S,GACFoK,EAAaJ,EAAQ,SAAU7a,EAAMqb,EAAMM,EAASC,GAClDhS,EAAW5J,EAAMib,EAAY7K,EAAM,MACnC,IAEIzI,EAAQ2C,EAAYrK,EAAQ4b,EAF5BzX,EAAQ,EACRqG,EAAS,EAEb,GAAK3O,EAASuf,GAIP,CAAA,KAAIA,aAAgB1U,IAhUd,gBAgU+BkV,EAAQjN,EAAQyM,KA/T9C,qBA+TwEQ,GAa/E,OAAIhE,MAAewD,EACjB7C,GAASyC,EAAYI,GAErB3C,GAAMrb,KAAK4d,EAAYI,GAf9B1T,EAAS0T,EACT5Q,EAAS0N,GAASwD,EAASvD,GAC3B,IAAI0D,EAAOT,EAAK/Q,WAChB,QAAgBtL,IAAZ4c,EAAuB,CACzB,GAAIE,EAAO1D,EAAO,MAAM5U,GApSf,iBAsST,IADA8G,EAAawR,EAAOrR,GACH,EAAG,MAAMjH,GAtSjB,sBAyST,IADA8G,EAAa/G,EAASqY,GAAWxD,GAChB3N,EAASqR,EAAM,MAAMtY,GAzS7B,iBA2SXvD,EAASqK,EAAa8N,OAftBnY,EAASiJ,EAAQmS,GAEjB1T,EAAS,IAAIhB,GADb2D,EAAarK,EAASmY,GA2BxB,IAPA3Y,EAAKO,EAAM,MACTG,EAAGwH,EACH4T,EAAG9Q,EACHsR,EAAGzR,EACHpO,EAAG+D,EACHqb,EAAG,IAAI1U,GAAUe,KAEZvD,EAAQnE,GAAQmb,EAAWpb,EAAMoE,OAE1C+W,EAAsBF,EAAoB,UAAI5M,EAAOuM,IACrDnb,EAAK0b,EAAqB,cAAeF,IAC/BvR,EAAM,WAChBuR,EAAW,MACNvR,EAAM,WACX,IAAIuR,GAAY,MACX1F,EAAY,SAAUhD,GAC3B,IAAI0I,EACJ,IAAIA,EAAW,MACf,IAAIA,EAAW,KACf,IAAIA,EAAW1I,KACd,KACD0I,EAAaJ,EAAQ,SAAU7a,EAAMqb,EAAMM,EAASC,GAElD,IAAIC,EAGJ,OAJAjS,EAAW5J,EAAMib,EAAY7K,GAIxBtU,EAASuf,GACVA,aAAgB1U,IA7WP,gBA6WwBkV,EAAQjN,EAAQyM,KA5WvC,qBA4WiEQ,OAC1D7c,IAAZ4c,EACH,IAAIlL,EAAK2K,EAAMlD,GAASwD,EAASvD,GAAQwD,QAC7B5c,IAAZ2c,EACE,IAAIjL,EAAK2K,EAAMlD,GAASwD,EAASvD,IACjC,IAAI1H,EAAK2K,GAEbxD,MAAewD,EAAa7C,GAASyC,EAAYI,GAC9C3C,GAAMrb,KAAK4d,EAAYI,GATF,IAAI3K,EAAKxH,EAAQmS,MAW/ClF,GAAa+E,IAAQ5f,SAASsE,UAAY4G,EAAKkK,GAAM3R,OAAOyH,EAAK0U,IAAQ1U,EAAKkK,GAAO,SAAUpS,GACvFA,KAAO2c,GAAaxb,EAAKwb,EAAY3c,EAAKoS,EAAKpS,MAEvD2c,EAAoB,UAAIE,EACVA,EAAoBpR,YAAckR,GAElD,IAAIe,EAAkBb,EAAoBvO,IACtCqP,IAAsBD,IACI,UAAxBA,EAAgBvb,MAA4CzB,MAAxBgd,EAAgBvb,MACtDyb,EAAY3B,GAAW7I,OAC3BjS,EAAKwb,EAAYvD,IAAmB,GACpCjY,EAAK0b,EAAqBtD,GAAazH,GACvC3Q,EAAK0b,EAAqBlZ,IAAM,GAChCxC,EAAK0b,EAAqBxD,GAAiBsD,IAEvCH,EAAU,IAAIG,EAAW,GAAG7U,KAAQgK,EAAShK,MAAO+U,IACtD5d,GAAG4d,EAAqB/U,IACtB7J,IAAK,WAAc,OAAO6T,KAI9B5S,EAAE4S,GAAQ6K,EAEV1a,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKka,GAAcvK,GAAOlT,GAElE+C,EAAQA,EAAQtD,EAAGmT,GACjBgK,kBAAmBhC,IAGrB7X,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI2I,EAAM,WAAcgH,EAAKyL,GAAG9e,KAAK4d,EAAY,KAAQ7K,GACnFuC,KAAM+F,GACNyD,GAAIpD,KApZgB,sBAuZKoC,GAAsB1b,EAAK0b,EAvZhC,oBAuZwE/C,GAE9F7X,EAAQA,EAAQ9C,EAAG2S,EAAMc,IAEzBuE,EAAWrF,GAEX7P,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAImX,GAAY9H,GAAQ7G,IAAK8Q,KAEzD9Z,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAKkb,EAAmB7L,EAAMmK,IAE1CY,EAAoB/d,UAAYma,KAAe4D,EAAoB/d,SAAWma,IAE9FhX,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI2I,EAAM,WACpC,IAAIuR,EAAW,GAAGvX,UAChB0M,GAAQ1M,MAAOqI,KAEnBxL,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAK2I,EAAM,WACrC,OAAQ,EAAG,GAAG+N,kBAAoB,IAAIwD,GAAY,EAAG,IAAIxD,qBACpD/N,EAAM,WACXyR,EAAoB1D,eAAepa,MAAM,EAAG,OACzC+S,GAAQqH,eAAgBwB,KAE7BlM,EAAUqD,GAAQ6L,EAAoBD,EAAkBE,EACvCD,GAAmBxc,EAAK0b,EAAqBvO,GAAUsP,SAErEjhB,EAAAC,QAAiB,eC/dxBkB,GAA0B,OAAQ,EAAG,SAAUggB,GAC7C,OAAO,SAAmBf,EAAMjR,EAAYnK,GAC1C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCFxC7D,GAA0B,QAAS,EAAG,SAAUggB,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYnK,GAC3C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCFxC7D,GAA0B,QAAS,EAAG,SAAUggB,GAC9C,OAAO,SAA2Bf,EAAMjR,EAAYnK,GAClD,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MAErC,GCJH7D,GAA0B,QAAS,EAAG,SAAUggB,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYnK,GAC3C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCFxC7D,GAA0B,SAAU,EAAG,SAAUggB,GAC/C,OAAO,SAAqBf,EAAMjR,EAAYnK,GAC5C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCFxC7D,GAA0B,QAAS,EAAG,SAAUggB,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYnK,GAC3C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCFxC7D,GAA0B,SAAU,EAAG,SAAUggB,GAC/C,OAAO,SAAqBf,EAAMjR,EAAYnK,GAC5C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCFxC7D,GAA0B,UAAW,EAAG,SAAUggB,GAChD,OAAO,SAAsBf,EAAMjR,EAAYnK,GAC7C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCFxC7D,GAA0B,UAAW,EAAG,SAAUggB,GAChD,OAAO,SAAsBf,EAAMjR,EAAYnK,GAC7C,OAAOmc,EAAKvc,KAAMwb,EAAMjR,EAAYnK,MCAxC,IAAAoc,GAAiB,SAAU1D,EAAUzb,EAAIY,EAAO2T,GAC9C,IACE,OAAOA,EAAUvU,EAAGS,EAASG,GAAO,GAAIA,EAAM,IAAMZ,EAAGY,GAEvD,MAAO5B,GACP,IAAIogB,EAAM3D,EAAiB,OAE3B,WADY3Z,IAARsd,GAAmB3e,EAAS2e,EAAIjf,KAAKsb,IACnCzc,qBCHV,IAAIqgB,KACAC,KACAthB,EAAUD,EAAAC,QAAiB,SAAUuhB,EAAUhL,EAASvU,EAAI8C,EAAM4M,GACpE,IAGI3M,EAAQ+R,EAAM2G,EAAUrT,EAHxBwT,EAASlM,EAAW,WAAc,OAAO6P,GAAc/H,GAAU+H,GACjEle,EAAIiD,EAAItE,EAAI8C,EAAMyR,EAAU,EAAI,GAChCrN,EAAQ,EAEZ,GAAqB,mBAAV0U,EAAsB,MAAM/c,UAAU0gB,EAAW,qBAE5D,GAAIpI,GAAYyE,IAAS,IAAK7Y,EAASsD,EAASkZ,EAASxc,QAASA,EAASmE,EAAOA,IAEhF,IADAkB,EAASmM,EAAUlT,EAAEZ,EAASqU,EAAOyK,EAASrY,IAAQ,GAAI4N,EAAK,IAAMzT,EAAEke,EAASrY,OACjEmY,GAASjX,IAAWkX,EAAQ,OAAOlX,OAC7C,IAAKqT,EAAWG,EAAOzb,KAAKof,KAAazK,EAAO2G,EAAStI,QAAQJ,MAEtE,IADA3K,EAASjI,GAAKsb,EAAUpa,EAAGyT,EAAKlU,MAAO2T,MACxB8K,GAASjX,IAAWkX,EAAQ,OAAOlX,GAGtDpK,EAAQqhB,MAAQA,EAChBrhB,EAAQshB,OAASA,qBCxBjB,IAAIE,EAAOtgB,EAAkB,QAGzBugB,EAAU7f,EAAwByB,EAClCI,EAAK,EACLie,EAAevgB,OAAOugB,cAAgB,WACxC,OAAO,GAELC,GAAU9f,EAAoB,WAChC,OAAO6f,EAAavgB,OAAOygB,yBAEzBC,EAAU,SAAUnhB,GACtB+gB,EAAQ/gB,EAAI8gB,GAAQ5e,OAClBwE,EAAG,OAAQ3D,EACXqe,SAgCAC,EAAOhiB,EAAAC,SACT0Q,IAAK8Q,EACLQ,MAAM,EACNC,QAhCY,SAAUvhB,EAAIyS,GAE1B,IAAKvS,EAASF,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK4D,EAAI5D,EAAI8gB,GAAO,CAElB,IAAKE,EAAahhB,GAAK,MAAO,IAE9B,IAAKyS,EAAQ,MAAO,IAEpB0O,EAAQnhB,GAER,OAAOA,EAAG8gB,GAAMpa,GAsBlB8a,QApBY,SAAUxhB,EAAIyS,GAC1B,IAAK7O,EAAI5D,EAAI8gB,GAAO,CAElB,IAAKE,EAAahhB,GAAK,OAAO,EAE9B,IAAKyS,EAAQ,OAAO,EAEpB0O,EAAQnhB,GAER,OAAOA,EAAG8gB,GAAMM,GAYlBK,SATa,SAAUzhB,GAEvB,OADIihB,GAAUI,EAAKC,MAAQN,EAAahhB,KAAQ4D,EAAI5D,EAAI8gB,IAAOK,EAAQnhB,GAChEA,MC3CT0hB,qDAAiB,SAAU1hB,EAAIuT,GAC7B,IAAKrT,EAASF,IAAOA,EAAGiW,KAAO1C,EAAM,MAAMpT,UAAU,0BAA4BoT,EAAO,cACxF,OAAOvT,ICFL2B,GAAKnB,EAAwBmC,EAU7B4e,GAAUrgB,GAAmBqgB,QAE7BI,GAAOnW,EAAc,KAAO,OAE5BoW,GAAW,SAAUxd,EAAM1B,GAE7B,IACImf,EADArZ,EAAQ+Y,GAAQ7e,GAEpB,GAAc,MAAV8F,EAAe,OAAOpE,EAAK8R,GAAG1N,GAElC,IAAKqZ,EAAQzd,EAAK0d,GAAID,EAAOA,EAAQA,EAAME,EACzC,GAAIF,EAAMG,GAAKtf,EAAK,OAAOmf,GAI/BI,IACEC,eAAgB,SAAUjD,EAASzK,EAAMf,EAAQ0O,GAC/C,IAAIlV,EAAIgS,EAAQ,SAAU7a,EAAMyc,GAC9B7S,EAAW5J,EAAM6I,EAAGuH,EAAM,MAC1BpQ,EAAK6R,GAAKzB,EACVpQ,EAAK8R,GAAKzD,GAAO,MACjBrO,EAAK0d,QAAK1e,EACVgB,EAAKge,QAAKhf,EACVgB,EAAKud,IAAQ,EACGve,MAAZyd,GAAuBwB,GAAMxB,EAAUpN,EAAQrP,EAAK+d,GAAQ/d,KAsDlE,OApDAmK,EAAYtB,EAAEjJ,WAGZse,MAAO,WACL,IAAK,IAAIle,EAAOqY,GAASxY,KAAMuQ,GAAOiL,EAAOrb,EAAK8R,GAAI2L,EAAQzd,EAAK0d,GAAID,EAAOA,EAAQA,EAAME,EAC1FF,EAAMU,GAAI,EACNV,EAAMW,IAAGX,EAAMW,EAAIX,EAAMW,EAAET,OAAI3e,UAC5Bqc,EAAKoC,EAAMnb,GAEpBtC,EAAK0d,GAAK1d,EAAKge,QAAKhf,EACpBgB,EAAKud,IAAQ,GAIfc,OAAU,SAAU/f,GAClB,IAAI0B,EAAOqY,GAASxY,KAAMuQ,GACtBqN,EAAQD,GAASxd,EAAM1B,GAC3B,GAAImf,EAAO,CACT,IAAIpN,EAAOoN,EAAME,EACbW,EAAOb,EAAMW,SACVpe,EAAK8R,GAAG2L,EAAMnb,GACrBmb,EAAMU,GAAI,EACNG,IAAMA,EAAKX,EAAItN,GACfA,IAAMA,EAAK+N,EAAIE,GACfte,EAAK0d,IAAMD,IAAOzd,EAAK0d,GAAKrN,GAC5BrQ,EAAKge,IAAMP,IAAOzd,EAAKge,GAAKM,GAChCte,EAAKud,MACL,QAASE,GAIbjE,QAAS,SAAiB5J,GACxByI,GAASxY,KAAMuQ,GAGf,IAFA,IACIqN,EADAlf,EAAIiD,EAAIoO,EAAYtP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAW,GAElEye,EAAQA,EAAQA,EAAME,EAAI9d,KAAK6d,IAGpC,IAFAnf,EAAEkf,EAAMnC,EAAGmC,EAAMG,EAAG/d,MAEb4d,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,GAK3C5e,IAAK,SAAalB,GAChB,QAASkf,GAASnF,GAASxY,KAAMuQ,GAAO9R,MAGxC8I,GAAa7J,GAAGsL,EAAEjJ,UAAW,QAC/BrD,IAAK,WACH,OAAO8b,GAASxY,KAAMuQ,GAAMmN,OAGzB1U,GAET1C,IAAK,SAAUnG,EAAM1B,EAAKR,GACxB,IACIwgB,EAAMla,EADNqZ,EAAQD,GAASxd,EAAM1B,GAoBzB,OAjBEmf,EACFA,EAAMnC,EAAIxd,GAGVkC,EAAKge,GAAKP,GACRnb,EAAG8B,EAAQ+Y,GAAQ7e,GAAK,GACxBsf,EAAGtf,EACHgd,EAAGxd,EACHsgB,EAAGE,EAAOte,EAAKge,GACfL,OAAG3e,EACHmf,GAAG,GAEAne,EAAK0d,KAAI1d,EAAK0d,GAAKD,GACpBa,IAAMA,EAAKX,EAAIF,GACnBzd,EAAKud,MAES,MAAVnZ,IAAepE,EAAK8R,GAAG1N,GAASqZ,IAC7Bzd,GAEXwd,SAAUA,GACVe,UAAW,SAAU1V,EAAGuH,EAAMf,GAG5BmP,GAAY3V,EAAGuH,EAAM,SAAUwB,EAAUX,GACvCpR,KAAKgS,GAAKwG,GAASzG,EAAUxB,GAC7BvQ,KAAKkS,GAAKd,EACVpR,KAAKme,QAAKhf,GACT,WAKD,IAJA,IACIiS,EADOpR,KACKkS,GACZ0L,EAFO5d,KAEMme,GAEVP,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,EAEvC,OANWve,KAMDgS,KANChS,KAMYme,GAAKP,EAAQA,EAAQA,EAAME,EANvC9d,KAMgDgS,GAAG6L,IAMnC1L,GAAK,EAApB,QAARf,EAA+BwM,EAAMG,EAC7B,UAAR3M,EAAiCwM,EAAMnC,GAC3BmC,EAAMG,EAAGH,EAAMnC,KAdpBzb,KAQJgS,QAAK7S,EACHgT,GAAK,KAMb3C,EAAS,UAAY,UAAWA,GAAQ,GAG3CoG,GAAWrF,KCzIXqO,GAAQ,SAAUjhB,EAAG0T,GAEvB,GADAvT,EAASH,IACJ1B,EAASoV,IAAoB,OAAVA,EAAgB,MAAMnV,UAAUmV,EAAQ,8BAElEwN,IACEnV,IAAKlN,OAAOsiB,iBAAmB,gBAC7B,SAAUC,EAAMC,EAAOtV,GACrB,KACEA,EAAMnN,EAAkBd,SAAS+B,KAAMP,GAA0ByB,EAAElC,OAAOuD,UAAW,aAAa2J,IAAK,IACnGqV,MACJC,IAAUD,aAAgBhX,OAC1B,MAAO1L,GAAK2iB,GAAQ,EACtB,OAAO,SAAwBrhB,EAAG0T,GAIhC,OAHAuN,GAAMjhB,EAAG0T,GACL2N,EAAOrhB,EAAEshB,UAAY5N,EACpB3H,EAAI/L,EAAG0T,GACL1T,GAVX,KAYM,QAASwB,GACjByf,MAAOA,ICtBLE,GAAiBviB,GAAwBmN,ICa7CwV,GAAiB,SAAU3O,EAAMyK,EAAS9J,EAASiO,EAAQ3P,EAAQ4P,GACjE,IAAIvO,EAAO1V,EAAOoV,GACdvH,EAAI6H,EACJqN,EAAQ1O,EAAS,MAAQ,MACzB6B,EAAQrI,GAAKA,EAAEjJ,UACfpC,KACA0hB,EAAY,SAAUtT,GACxB,IAAI1O,EAAKgU,EAAMtF,GACfnK,EAASyP,EAAOtF,EACP,UAAPA,EAAkB,SAAUpP,GAC1B,QAAOyiB,IAAYnjB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPoP,EAAe,SAAapP,GAC9B,QAAOyiB,IAAYnjB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPoP,EAAe,SAAapP,GAC9B,OAAOyiB,IAAYnjB,EAASU,QAAKwC,EAAY9B,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAChE,OAAPoP,EAAe,SAAapP,GAAqC,OAAhCU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,GAAWqD,MACxE,SAAarD,EAAG2D,GAAwC,OAAnCjD,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,EAAG2D,GAAWN,QAGvE,GAAgB,mBAALgJ,IAAqBoW,GAAW/N,EAAMsI,UAAY9P,EAAM,YACjE,IAAIb,GAAI4I,UAAUpB,UAMb,CACL,IAAI8O,EAAW,IAAItW,EAEfuW,EAAiBD,EAASpB,GAAOkB,MAAgB,EAAG,IAAME,EAE1DE,EAAuB3V,EAAM,WAAcyV,EAAS3f,IAAI,KAExD8f,EAAmB/J,GAAY,SAAUhD,GAAQ,IAAI1J,EAAE0J,KAEvDgN,GAAcN,GAAWvV,EAAM,WAIjC,IAFA,IAAI8V,EAAY,IAAI3W,EAChBzE,EAAQ,EACLA,KAASob,EAAUzB,GAAO3Z,EAAOA,GACxC,OAAQob,EAAUhgB,KAAK,KAEpB8f,KACHzW,EAAIgS,EAAQ,SAAUvZ,EAAQmb,GAC5B7S,EAAWtI,EAAQuH,EAAGuH,GACtB,IAAIpQ,EDzDK,SAAUA,EAAMsB,EAAQuH,GACvC,IACIpL,EADAR,EAAIqE,EAAOyI,YAIb,OAFE9M,IAAM4L,GAAiB,mBAAL5L,IAAoBQ,EAAIR,EAAE2C,aAAeiJ,EAAEjJ,WAAa9D,EAAS2B,IAAMkhB,IAC3FA,GAAe3e,EAAMvC,GACduC,ECoDQyf,CAAkB,IAAI/O,EAAQpP,EAAQuH,GAEjD,OADgB7J,MAAZyd,GAAuBwB,GAAMxB,EAAUpN,EAAQrP,EAAK+d,GAAQ/d,GACzDA,KAEPJ,UAAYsR,EACdA,EAAMnH,YAAclB,IAElBwW,GAAwBE,KAC1BL,EAAU,UACVA,EAAU,OACV7P,GAAU6P,EAAU,SAElBK,GAAcH,IAAgBF,EAAUnB,GAExCkB,GAAW/N,EAAMgN,cAAchN,EAAMgN,WApCzCrV,EAAImW,EAAOlB,eAAejD,EAASzK,EAAMf,EAAQ0O,GACjD5T,EAAYtB,EAAEjJ,UAAWmR,GACzBkM,GAAKC,MAAO,EA4Cd,OAPA3R,GAAe1C,EAAGuH,GAElB5S,EAAE4S,GAAQvH,EACVtI,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAK8H,GAAK6H,GAAOlT,GAEpDyhB,GAASD,EAAOT,UAAU1V,EAAGuH,EAAMf,GAEjCxG,OC7EQzM,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/EzC,IAAK,SAAa+B,GAChB,IAAImf,EAAQiC,GAAOlC,SAASnF,GAASxY,KAR/B,OAQ2CvB,GACjD,OAAOmf,GAASA,EAAMnC,GAGxB/R,IAAK,SAAajL,EAAKR,GACrB,OAAO4hB,GAAOvZ,IAAIkS,GAASxY,KAbrB,OAayC,IAARvB,EAAY,EAAIA,EAAKR,KAE7D4hB,IAAQ,GCZMtjB,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/E2gB,IAAK,SAAa7hB,GAChB,OAAO4hB,GAAOvZ,IAAIkS,GAASxY,KARrB,OAQiC/B,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,KAEzE4hB,OCbSrjB,OAAOujB,wBCOfC,GAAUxjB,OAAOyjB,OAGrBC,IAAkBF,IAAWzjB,EAAoB,WAC/C,IAAI4jB,KACA3e,KAEApE,EAAIgJ,SACJga,EAAI,uBAGR,OAFAD,EAAE/iB,GAAK,EACPgjB,EAAE7gB,MAAM,IAAIoa,QAAQ,SAAUoE,GAAKvc,EAAEuc,GAAKA,IACd,GAArBiC,MAAYG,GAAG/iB,IAAWZ,OAAOwN,KAAKgW,MAAYxe,IAAI3B,KAAK,KAAOugB,IACtE,SAAgB3e,EAAQZ,GAM3B,IALA,IAAI8L,EAAI3G,GAASvE,GACbwE,EAAOxF,UAAUL,OACjBmE,EAAQ,EACR8b,EAAaC,GAAK5hB,EAClB6hB,EAASpN,GAAIzU,EACVuH,EAAO1B,GAMZ,IALA,IAII9F,EAJArB,EAAI+G,EAAQ1D,UAAU8D,MACtByF,EAAOqW,EAAa7S,GAAQpQ,GAAG8B,OAAOmhB,EAAWjjB,IAAMoQ,GAAQpQ,GAC/DgD,EAAS4J,EAAK5J,OACd6J,EAAI,EAED7J,EAAS6J,GAAOsW,EAAO/iB,KAAKJ,EAAGqB,EAAMuL,EAAKC,QAAO0C,EAAElO,GAAOrB,EAAEqB,IACnE,OAAOkO,GACPqT,GC/BAzC,GAAUhhB,GAAmBghB,QAQ7B7G,GAAYxB,GAAkB,GAC9ByB,GAAiBzB,GAAkB,GACnCpW,GAAK,EAGL0hB,GAAsB,SAAUrgB,GAClC,OAAOA,EAAKge,KAAOhe,EAAKge,GAAK,IAAIsC,KAE/BA,GAAsB,WACxBzgB,KAAKrD,MAEH+jB,GAAqB,SAAU3b,EAAOtG,GACxC,OAAOiY,GAAU3R,EAAMpI,EAAG,SAAUZ,GAClC,OAAOA,EAAG,KAAO0C,KAGrBgiB,GAAoB1gB,WAClBrD,IAAK,SAAU+B,GACb,IAAImf,EAAQ8C,GAAmB1gB,KAAMvB,GACrC,GAAImf,EAAO,OAAOA,EAAM,IAE1Bje,IAAK,SAAUlB,GACb,QAASiiB,GAAmB1gB,KAAMvB,IAEpCiL,IAAK,SAAUjL,EAAKR,GAClB,IAAI2f,EAAQ8C,GAAmB1gB,KAAMvB,GACjCmf,EAAOA,EAAM,GAAK3f,EACjB+B,KAAKrD,EAAEqI,MAAMvG,EAAKR,KAEzBugB,OAAU,SAAU/f,GAClB,IAAI8F,EAAQoS,GAAe3W,KAAKrD,EAAG,SAAUZ,GAC3C,OAAOA,EAAG,KAAO0C,IAGnB,OADK8F,GAAOvE,KAAKrD,EAAEgkB,OAAOpc,EAAO,MACvBA,IAId,IAAAqc,IACE3C,eAAgB,SAAUjD,EAASzK,EAAMf,EAAQ0O,GAC/C,IAAIlV,EAAIgS,EAAQ,SAAU7a,EAAMyc,GAC9B7S,EAAW5J,EAAM6I,EAAGuH,EAAM,MAC1BpQ,EAAK6R,GAAKzB,EACVpQ,EAAK8R,GAAKnT,KACVqB,EAAKge,QAAKhf,EACMA,MAAZyd,GAAuBwB,GAAMxB,EAAUpN,EAAQrP,EAAK+d,GAAQ/d,KAoBlE,OAlBAmK,EAAYtB,EAAEjJ,WAGZye,OAAU,SAAU/f,GAClB,IAAKxC,EAASwC,GAAM,OAAO,EAC3B,IAAI+c,EAAO+B,GAAQ9e,GACnB,OAAa,IAAT+c,EAAsBgF,GAAoBhI,GAASxY,KAAMuQ,IAAe,OAAE9R,GACvE+c,GAAQqF,EAAKrF,EAAMxb,KAAKiS,YAAcuJ,EAAKxb,KAAKiS,KAIzDtS,IAAK,SAAalB,GAChB,IAAKxC,EAASwC,GAAM,OAAO,EAC3B,IAAI+c,EAAO+B,GAAQ9e,GACnB,OAAa,IAAT+c,EAAsBgF,GAAoBhI,GAASxY,KAAMuQ,IAAO5Q,IAAIlB,GACjE+c,GAAQqF,EAAKrF,EAAMxb,KAAKiS,OAG5BjJ,GAET1C,IAAK,SAAUnG,EAAM1B,EAAKR,GACxB,IAAIud,EAAO+B,GAAQzf,EAASW,IAAM,GAGlC,OAFa,IAAT+c,EAAegF,GAAoBrgB,GAAMuJ,IAAIjL,EAAKR,GACjDud,EAAKrb,EAAK8R,IAAMhU,EACdkC,GAET2gB,QAASN,kBCnFX,IAcIO,EAbAC,EAAOzkB,GAA4B,GASnCghB,EAAUH,GAAKG,QACfR,EAAevgB,OAAOugB,aACtByD,EAAsBS,GAAKH,QAC3BI,KAGAlG,EAAU,SAAUte,GACtB,OAAO,WACL,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAIvD+R,GAEFxU,IAAK,SAAa+B,GAChB,GAAIxC,EAASwC,GAAM,CACjB,IAAI+c,EAAO+B,EAAQ9e,GACnB,OAAa,IAAT+c,EAAsBgF,EAAoBhI,GAASxY,KAlB9C,YAkB+DtD,IAAI+B,GACrE+c,EAAOA,EAAKxb,KAAKiS,SAAM9S,IAIlCuK,IAAK,SAAajL,EAAKR,GACrB,OAAOgjB,GAAK3a,IAAIkS,GAASxY,KAxBd,WAwB+BvB,EAAKR,KAK/CkjB,EAAW/lB,EAAAC,QAAiB4B,GA7BjB,UA6BoD+d,EAAS9J,EAAS+P,IAAM,GAAM,GAG7FpX,EAAM,WAAc,OAAyE,IAAlE,IAAIsX,GAAWzX,KAAKlN,OAAO4kB,QAAU5kB,QAAQ0kB,GAAM,GAAGxkB,IAAIwkB,OACvFH,EAAcE,GAAKhD,eAAejD,EAjCrB,WAkCbiF,GAAOc,EAAYhhB,UAAWmR,GAC9BkM,GAAKC,MAAO,EACZ2D,GAAM,SAAU,MAAO,MAAO,OAAQ,SAAUviB,GAC9C,IAAI4S,EAAQ8P,EAASphB,UACjBshB,EAAShQ,EAAM5S,GACnBmD,EAASyP,EAAO5S,EAAK,SAAU9B,EAAG2D,GAEhC,GAAIrE,EAASU,KAAOogB,EAAapgB,GAAI,CAC9BqD,KAAK6d,KAAI7d,KAAK6d,GAAK,IAAIkD,GAC5B,IAAItb,EAASzF,KAAK6d,GAAGpf,GAAK9B,EAAG2D,GAC7B,MAAc,OAAP7B,EAAeuB,KAAOyF,EAE7B,OAAO4b,EAAO7jB,KAAKwC,KAAMrD,EAAG2D,UCjDpC/D,GAHe,UAGoB,SAAUG,GAC3C,OAAO,WAAqB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGnF2gB,IAAK,SAAa7hB,GAChB,OAAOgjB,GAAK3a,IAAIkS,GAASxY,KARd,WAQ+B/B,GAAO,KAElDgjB,IAAM,GAAO,GCThB,IAAIK,IAAU/kB,EAAqBglB,aAAe/gB,MAC9CghB,GAAS/lB,SAAS+E,MAEtBE,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKjE,EAAoB,WACnDqkB,GAAO,gBACL,WACF9gB,MAAO,SAAeiB,EAAQggB,EAAcC,GAC1C,IAAI/U,EAAItM,EAAUoB,GACdkgB,EAAI7jB,EAAS4jB,GACjB,OAAOJ,GAASA,GAAO3U,EAAG8U,EAAcE,GAAKH,GAAOhkB,KAAKmP,EAAG8U,EAAcE,MCZ9E,IAAAC,GAAiB,SAAUvkB,EAAIwkB,EAAM1hB,GACnC,IAAI2hB,OAAc3iB,IAATgB,EACT,OAAQ0hB,EAAKzhB,QACX,KAAK,EAAG,OAAO0hB,EAAKzkB,IACAA,EAAGG,KAAK2C,GAC5B,KAAK,EAAG,OAAO2hB,EAAKzkB,EAAGwkB,EAAK,IACRxkB,EAAGG,KAAK2C,EAAM0hB,EAAK,IACvC,KAAK,EAAG,OAAOC,EAAKzkB,EAAGwkB,EAAK,GAAIA,EAAK,IACjBxkB,EAAGG,KAAK2C,EAAM0hB,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOC,EAAKzkB,EAAGwkB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1BxkB,EAAGG,KAAK2C,EAAM0hB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzD,KAAK,EAAG,OAAOC,EAAKzkB,EAAGwkB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACnCxkB,EAAGG,KAAK2C,EAAM0hB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAClE,OAAOxkB,EAAGmD,MAAML,EAAM0hB,ICVtBpK,MAAgB5T,MAChBke,MAUJC,GAAiBvmB,SAASwmB,MAAQ,SAAc9hB,GAC9C,IAAI9C,EAAKgD,EAAUL,MACfkiB,EAAWzK,GAAWja,KAAKiD,UAAW,GACtC0hB,EAAQ,WACV,IAAIN,EAAOK,EAAShjB,OAAOuY,GAAWja,KAAKiD,YAC3C,OAAOT,gBAAgBmiB,EAbX,SAAUjhB,EAAGiL,EAAK0V,GAChC,KAAM1V,KAAO4V,IAAY,CACvB,IAAK,IAAIjE,KAAQrb,EAAI,EAAGA,EAAI0J,EAAK1J,IAAKqb,EAAErb,GAAK,KAAOA,EAAI,IAExDsf,GAAU5V,GAAO1Q,SAAS,MAAO,gBAAkBqiB,EAAEje,KAAK,KAAO,KACjE,OAAOkiB,GAAU5V,GAAKjL,EAAG2gB,GAQMO,CAAU/kB,EAAIwkB,EAAKzhB,OAAQyhB,GAAQQ,GAAOhlB,EAAIwkB,EAAM1hB,IAGrF,OADIlE,EAASoB,EAAG0C,aAAYoiB,EAAMpiB,UAAY1C,EAAG0C,WAC1CoiB,GCfLG,IAAc/lB,EAAqBglB,aAAea,UAIlDG,GAAiB1Y,EAAM,WACzB,SAAS3I,KACT,QAASohB,GAAW,gBAAiCphB,aAAcA,KAEjEshB,IAAY3Y,EAAM,WACpByY,GAAW,gBAGb5hB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKqhB,IAAkBC,IAAW,WAC5DJ,UAAW,SAAmBK,EAAQZ,GACpCxhB,EAAUoiB,GACV3kB,EAAS+jB,GACT,IAAIa,EAAYjiB,UAAUL,OAAS,EAAIqiB,EAASpiB,EAAUI,UAAU,IACpE,GAAI+hB,KAAaD,GAAgB,OAAOD,GAAWG,EAAQZ,EAAMa,GACjE,GAAID,GAAUC,EAAW,CAEvB,OAAQb,EAAKzhB,QACX,KAAK,EAAG,OAAO,IAAIqiB,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAOZ,EAAK,IAC/B,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,IACxC,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjD,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAG5D,IAAIc,GAAS,MAEb,OADAA,EAAM3d,KAAKxE,MAAMmiB,EAAOd,GACjB,IAAKI,GAAKzhB,MAAMiiB,EAAQE,IAGjC,IAAItR,EAAQqR,EAAU3iB,UAClBuf,EAAW9Q,GAAOvS,EAASoV,GAASA,EAAQ7U,OAAOuD,WACnD0F,EAAShK,SAAS+E,MAAMhD,KAAKilB,EAAQnD,EAAUuC,GACnD,OAAO5lB,EAASwJ,GAAUA,EAAS6Z,KCrCvC5e,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAElDglB,QAAQ9kB,eAAeiB,EAAGgB,KAAM,GAAKT,MAAO,IAAM,GAAKA,MAAO,MAC5D,WACFxB,eAAgB,SAAwBgF,EAAQmhB,EAAaC,GAC3D/kB,EAAS2D,GACTmhB,EAAc7kB,EAAY6kB,GAAa,GACvC9kB,EAAS+kB,GACT,IAEE,OADAnlB,EAAGgB,EAAE+C,EAAQmhB,EAAaC,IACnB,EACP,MAAOxmB,GACP,OAAO,MCjBb,IAAI4W,GAAO1W,GAA0BmC,EAGrCgC,EAAQA,EAAQtD,EAAG,WACjB0lB,eAAgB,SAAwBrhB,EAAQmhB,GAC9C,IAAI9H,EAAO7H,GAAKnV,EAAS2D,GAASmhB,GAClC,QAAO9H,IAASA,EAAKzc,sBAA8BoD,EAAOmhB,MCY9DliB,EAAQA,EAAQtD,EAAG,WAAaV,IAZhC,SAASA,EAAI+E,EAAQmhB,GACnB,IACI9H,EAAMzJ,EADN0R,EAAWtiB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GAEzD,OAAI3C,EAAS2D,KAAYshB,EAAiBthB,EAAOmhB,IAC7C9H,EAAO7H,GAAKvU,EAAE+C,EAAQmhB,IAAqBjjB,EAAImb,EAAM,SACrDA,EAAK7c,WACQkB,IAAb2b,EAAKpe,IACHoe,EAAKpe,IAAIc,KAAKulB,QACd5jB,EACFlD,EAASoV,EAAQzC,GAAenN,IAAiB/E,EAAI2U,EAAOuR,EAAaG,QAA7E,KCZFriB,EAAQA,EAAQtD,EAAG,WACjB8V,yBAA0B,SAAkCzR,EAAQmhB,GAClE,OAAO3P,GAAKvU,EAAEZ,EAAS2D,GAASmhB,MCFpCliB,EAAQA,EAAQtD,EAAG,WACjBwR,eAAgB,SAAwBnN,GACtC,OAAOuhB,GAASllB,EAAS2D,OCJ7Bf,EAAQA,EAAQtD,EAAG,WACjBuC,IAAK,SAAa8B,EAAQmhB,GACxB,OAAOA,KAAenhB,KCF1B,IAAIwhB,GAAgBzmB,OAAOugB,aAE3Brc,EAAQA,EAAQtD,EAAG,WACjB2f,aAAc,SAAsBtb,GAElC,OADA3D,EAAS2D,IACFwhB,IAAgBA,GAAcxhB,MCJzC,IAAI8f,GAAUhlB,EAAqBglB,QACnC2B,GAAiB3B,IAAWA,GAAQ4B,SAAW,SAAiBpnB,GAC9D,IAAIiO,EAAOrD,GAAKjI,EAAEZ,EAAS/B,IACvBskB,EAAaC,GAAK5hB,EACtB,OAAO2hB,EAAarW,EAAK9K,OAAOmhB,EAAWtkB,IAAOiO,GCLpDtJ,EAAQA,EAAQtD,EAAG,WAAa+lB,QAAS5mB,KCAzC,IAAI6mB,GAAqB5mB,OAAOygB,kBAEhCvc,EAAQA,EAAQtD,EAAG,WACjB6f,kBAAmB,SAA2Bxb,GAC5C3D,EAAS2D,GACT,IAEE,OADI2hB,IAAoBA,GAAmB3hB,IACpC,EACP,MAAOpF,GACP,OAAO,MCoBbqE,EAAQA,EAAQtD,EAAG,WAAasM,IAtBhC,SAASA,EAAIjI,EAAQmhB,EAAaS,GAChC,IAEIC,EAAoBjS,EAFpB0R,EAAWtiB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GACrD8iB,EAAUtQ,GAAKvU,EAAEZ,EAAS2D,GAASmhB,GAEvC,IAAKW,EAAS,CACZ,GAAItnB,EAASoV,EAAQzC,GAAenN,IAClC,OAAOiI,EAAI2H,EAAOuR,EAAaS,EAAGN,GAEpCQ,EAAU5kB,EAAW,GAEvB,GAAIgB,EAAI4jB,EAAS,SAAU,CACzB,IAAyB,IAArBA,EAAQjlB,WAAuBrC,EAAS8mB,GAAW,OAAO,EAC9D,GAAIO,EAAqBrQ,GAAKvU,EAAEqkB,EAAUH,GAAc,CACtD,GAAIU,EAAmB5mB,KAAO4mB,EAAmB5Z,MAAuC,IAAhC4Z,EAAmBhlB,SAAoB,OAAO,EACtGglB,EAAmBrlB,MAAQolB,EAC3B3lB,EAAGgB,EAAEqkB,EAAUH,EAAaU,QACvB5lB,EAAGgB,EAAEqkB,EAAUH,EAAajkB,EAAW,EAAG0kB,IACjD,OAAO,EAET,YAAuBlkB,IAAhBokB,EAAQ7Z,MAA6B6Z,EAAQ7Z,IAAIlM,KAAKulB,EAAUM,IAAI,MCzBzEG,IAAU9iB,EAAQA,EAAQtD,EAAG,WAC/B0hB,eAAgB,SAAwBrd,EAAQ4P,GAC9CmS,GAAS5E,MAAMnd,EAAQ4P,GACvB,IAEE,OADAmS,GAAS9Z,IAAIjI,EAAQ4P,IACd,EACP,MAAOhV,GACP,OAAO,MCNb,IAQIonB,GAAOC,GAASC,GARhBC,GAAUzoB,EAAOyoB,QACjBC,GAAU1oB,EAAO2oB,aACjBC,GAAY5oB,EAAO6oB,eACnBC,GAAiB9oB,EAAO8oB,eACxBC,GAAW/oB,EAAO+oB,SAClBC,GAAU,EACVC,MAGAC,GAAM,WACR,IAAIvlB,GAAMkB,KAEV,GAAIokB,GAAMxlB,eAAeE,GAAK,CAC5B,IAAIzB,EAAK+mB,GAAMtlB,UACRslB,GAAMtlB,GACbzB,MAGAinB,GAAW,SAAUC,GACvBF,GAAI7mB,KAAK+mB,EAAM/I,OAGZqI,IAAYE,KACfF,GAAU,SAAsBxmB,GAG9B,IAFA,IAAIwkB,KACApf,EAAI,EACDhC,UAAUL,OAASqC,GAAGof,EAAK7c,KAAKvE,UAAUgC,MAMjD,OALA2hB,KAAQD,IAAW,WAEjB9B,GAAoB,mBAANhlB,EAAmBA,EAAK5B,SAAS4B,GAAKwkB,IAEtD4B,GAAMU,IACCA,IAETJ,GAAY,SAAwBjlB,UAC3BslB,GAAMtlB,IAGmB,WAA9BvC,EAAkBqnB,IACpBH,GAAQ,SAAU3kB,GAChB8kB,GAAQY,SAAS7iB,EAAI0iB,GAAKvlB,EAAI,KAGvBolB,IAAYA,GAASO,IAC9BhB,GAAQ,SAAU3kB,GAChBolB,GAASO,IAAI9iB,EAAI0iB,GAAKvlB,EAAI,KAGnBmlB,IAETN,IADAD,GAAU,IAAIO,IACCS,MACfhB,GAAQiB,MAAMC,UAAYN,GAC1Bb,GAAQ9hB,EAAIgiB,GAAKkB,YAAalB,GAAM,IAG3BxoB,EAAO2pB,kBAA0C,mBAAfD,cAA8B1pB,EAAO4pB,eAChFtB,GAAQ,SAAU3kB,GAChB3D,EAAO0pB,YAAY/lB,EAAK,GAAI,MAE9B3D,EAAO2pB,iBAAiB,UAAWR,IAAU,IAG7Cb,GAvDqB,uBAsDUuB,EAAI,UAC3B,SAAUlmB,GAChBmmB,GAAKhX,YAAY+W,EAAI,WAA6B,mBAAI,WACpDC,GAAKC,YAAYllB,MACjBqkB,GAAI7mB,KAAKsB,KAKL,SAAUA,GAChBqmB,WAAWxjB,EAAI0iB,GAAKvlB,EAAI,GAAI,KAIlC,IAAAsmB,IACE1b,IAAKma,GACLxF,MAAO0F,ICjFLsB,GAAY9oB,GAAmBmN,IAC/B4b,GAAWnqB,EAAOoqB,kBAAoBpqB,EAAOqqB,uBAC7C5B,GAAUzoB,EAAOyoB,QACjB6B,GAAUtqB,EAAOsqB,QACjBC,GAAuC,WAA9BzoB,EAAkB2mB,ICD/B,SAAS+B,GAAkB3c,GACzB,IAAI4c,EAASC,EACb7lB,KAAK8lB,QAAU,IAAI9c,EAAE,SAAU+c,EAAWC,GACxC,QAAgB7mB,IAAZymB,QAAoCzmB,IAAX0mB,EAAsB,MAAM3pB,UAAU,2BACnE0pB,EAAUG,EACVF,EAASG,IAEXhmB,KAAK4lB,QAAUvlB,EAAUulB,GACzB5lB,KAAK6lB,OAASxlB,EAAUwlB,GAG1B,ICUII,GAAUC,GAA6BC,GAAsBC,SDV9C,SAAUpd,GAC3B,OAAO,IAAI2c,GAAkB3c,KEhB/Bqd,GAAiB,SAAUjqB,GACzB,IACE,OAASC,GAAG,EAAOof,EAAGrf,KACtB,MAAOC,GACP,OAASA,GAAG,EAAMof,EAAGpf,KCHrBiqB,GAAYnrB,EAAOmrB,UAEvBC,GAAiBD,IAAaA,GAAUE,WAAa,GFQjDC,GAAOlqB,GAAmBmN,IAC1Bgd,GFLa,WACf,IAAIC,EAAMC,EAAMC,EAEZC,EAAQ,WACV,IAAIC,EAAQ1pB,EAEZ,IADIqoB,KAAWqB,EAASnD,GAAQoD,SAASD,EAAOE,OACzCN,GAAM,CACXtpB,EAAKspB,EAAKtpB,GACVspB,EAAOA,EAAKnW,KACZ,IACEnT,IACA,MAAOhB,GAGP,MAFIsqB,EAAME,IACLD,OAAOznB,EACN9C,GAERuqB,OAAOznB,EACL4nB,GAAQA,EAAOG,SAIrB,GAAIxB,GACFmB,EAAS,WACPjD,GAAQY,SAASsC,SAGd,IAAIxB,IAAcnqB,EAAOmrB,WAAanrB,EAAOmrB,UAAUa,WAQvD,GAAI1B,IAAWA,GAAQG,QAAS,CAErC,IAAIE,EAAUL,GAAQG,aAAQzmB,GAC9B0nB,EAAS,WACPf,EAAQsB,KAAKN,SASfD,EAAS,WAEPxB,GAAU7nB,KAAKrC,EAAQ2rB,QAvBgD,CACzE,IAAIO,GAAS,EACTC,EAAO1qB,SAAS2qB,eAAe,IACnC,IAAIjC,GAASwB,GAAOU,QAAQF,GAAQG,eAAe,IACnDZ,EAAS,WACPS,EAAK9L,KAAO6L,GAAUA,GAsB1B,OAAO,SAAUhqB,GACf,IAAIopB,GAASppB,GAAIA,EAAImT,UAAMrR,GACvBynB,IAAMA,EAAKpW,KAAOiW,GACjBE,IACHA,EAAOF,EACPI,KACAD,EAAOH,GEtDGxpB,GAMZf,GAAYf,EAAOe,UACnB0nB,GAAUzoB,EAAOyoB,QACjB8D,GAAW9D,IAAWA,GAAQ8D,SAC9BC,GAAKD,IAAYA,GAASC,IAAM,GAChCC,GAAWzsB,EAAc,QACzBuqB,GAA6B,WAApB3W,GAAQ6U,IACjBiE,GAAQ,aAERC,GAAuB5B,GAA8B6B,GAA2BrpB,EAEhFspB,KAAe,WACjB,IAEE,IAAIlC,EAAU8B,GAAShC,QAAQ,GAC3BqC,GAAenC,EAAQ5b,gBAAkBhN,GAAkB,YAAc,SAAUd,GACrFA,EAAKyrB,GAAOA,KAGd,OAAQnC,IAA0C,mBAAzBwC,wBACpBpC,EAAQsB,KAAKS,cAAkBI,GAIT,IAAtBN,GAAG/N,QAAQ,SACyB,IAApC4M,GAAU5M,QAAQ,aACvB,MAAOvd,KAfQ,GAmBf8rB,GAAa,SAAUpsB,GACzB,IAAIqrB,EACJ,SAAOnrB,EAASF,IAAkC,mBAAnBqrB,EAAOrrB,EAAGqrB,QAAsBA,GAE7DP,GAAS,SAAUf,EAASsC,GAC9B,IAAItC,EAAQuC,GAAZ,CACAvC,EAAQuC,IAAK,EACb,IAAIC,EAAQxC,EAAQyC,GACpB7B,GAAU,WAoCR,IAnCA,IAAIzoB,EAAQ6nB,EAAQ0C,GAChBC,EAAmB,GAAd3C,EAAQ4C,GACbjmB,EAAI,EACJ4hB,EAAM,SAAUsE,GAClB,IAIIljB,EAAQ2hB,EAAMwB,EAJdC,EAAUJ,EAAKE,EAASF,GAAKE,EAASG,KACtClD,EAAU+C,EAAS/C,QACnBC,EAAS8C,EAAS9C,OAClBmB,EAAS2B,EAAS3B,OAEtB,IACM6B,GACGJ,IACe,GAAd3C,EAAQiD,IAASC,GAAkBlD,GACvCA,EAAQiD,GAAK,IAEC,IAAZF,EAAkBpjB,EAASxH,GAEzB+oB,GAAQA,EAAOE,QACnBzhB,EAASojB,EAAQ5qB,GACb+oB,IACFA,EAAOC,OACP2B,GAAS,IAGTnjB,IAAWkjB,EAAS7C,QACtBD,EAAO3pB,GAAU,yBACRkrB,EAAOe,GAAW1iB,IAC3B2hB,EAAK5pB,KAAKiI,EAAQmgB,EAASC,GACtBD,EAAQngB,IACVogB,EAAO5nB,GACd,MAAO5B,GACH2qB,IAAW4B,GAAQ5B,EAAOC,OAC9BpB,EAAOxpB,KAGJisB,EAAMloB,OAASqC,GAAG4hB,EAAIiE,EAAM7lB,MACnCqjB,EAAQyC,MACRzC,EAAQuC,IAAK,EACTD,IAAatC,EAAQiD,IAAIE,GAAYnD,OAGzCmD,GAAc,SAAUnD,GAC1BW,GAAKjpB,KAAKrC,EAAQ,WAChB,IAEIsK,EAAQojB,EAASK,EAFjBjrB,EAAQ6nB,EAAQ0C,GAChBW,EAAYC,GAAYtD,GAe5B,GAbIqD,IACF1jB,EAAS4jB,GAAQ,WACX3D,GACF9B,GAAQ0F,KAAK,qBAAsBrrB,EAAO6nB,IACjC+C,EAAU1tB,EAAOouB,sBAC1BV,GAAU/C,QAASA,EAAS0D,OAAQvrB,KAC1BirB,EAAU/tB,EAAO+tB,UAAYA,EAAQO,OAC/CP,EAAQO,MAAM,8BAA+BxrB,KAIjD6nB,EAAQiD,GAAKrD,IAAU0D,GAAYtD,GAAW,EAAI,GAClDA,EAAQ4D,QAAKvqB,EACXgqB,GAAa1jB,EAAOpJ,EAAG,MAAMoJ,EAAOgW,KAGxC2N,GAAc,SAAUtD,GAC1B,OAAsB,IAAfA,EAAQiD,IAAkD,KAArCjD,EAAQ4D,IAAM5D,EAAQyC,IAAInoB,QAEpD4oB,GAAoB,SAAUlD,GAChCW,GAAKjpB,KAAKrC,EAAQ,WAChB,IAAI0tB,EACAnD,GACF9B,GAAQ0F,KAAK,mBAAoBxD,IACxB+C,EAAU1tB,EAAOwuB,qBAC1Bd,GAAU/C,QAASA,EAAS0D,OAAQ1D,EAAQ0C,QAI9CoB,GAAU,SAAU3rB,GACtB,IAAI6nB,EAAU9lB,KACV8lB,EAAQlN,KACZkN,EAAQlN,IAAK,GACbkN,EAAUA,EAAQ+D,IAAM/D,GAChB0C,GAAKvqB,EACb6nB,EAAQ4C,GAAK,EACR5C,EAAQ4D,KAAI5D,EAAQ4D,GAAK5D,EAAQyC,GAAG1kB,SACzCgjB,GAAOf,GAAS,KAEdgE,GAAW,SAAU7rB,GACvB,IACImpB,EADAtB,EAAU9lB,KAEd,IAAI8lB,EAAQlN,GAAZ,CACAkN,EAAQlN,IAAK,EACbkN,EAAUA,EAAQ+D,IAAM/D,EACxB,IACE,GAAIA,IAAY7nB,EAAO,MAAM/B,GAAU,qCACnCkrB,EAAOe,GAAWlqB,IACpByoB,GAAU,WACR,IAAI1L,GAAY6O,GAAI/D,EAASlN,IAAI,GACjC,IACEwO,EAAK5pB,KAAKS,EAAO0D,EAAImoB,GAAU9O,EAAS,GAAIrZ,EAAIioB,GAAS5O,EAAS,IAClE,MAAO3e,GACPutB,GAAQpsB,KAAKwd,EAAS3e,OAI1BypB,EAAQ0C,GAAKvqB,EACb6nB,EAAQ4C,GAAK,EACb7B,GAAOf,GAAS,IAElB,MAAOzpB,GACPutB,GAAQpsB,MAAOqsB,GAAI/D,EAASlN,IAAI,GAASvc,MAKxC2rB,KAEHJ,GAAW,SAAiBmC,GAC1BhgB,EAAW/J,KAAM4nB,GA3JP,UA2J0B,MACpCvnB,EAAU0pB,GACV9D,GAASzoB,KAAKwC,MACd,IACE+pB,EAASpoB,EAAImoB,GAAU9pB,KAAM,GAAI2B,EAAIioB,GAAS5pB,KAAM,IACpD,MAAOgqB,GACPJ,GAAQpsB,KAAKwC,KAAMgqB,MAIvB/D,GAAW,SAAiB8D,GAC1B/pB,KAAKuoB,MACLvoB,KAAK0pB,QAAKvqB,EACVa,KAAK0oB,GAAK,EACV1oB,KAAK4Y,IAAK,EACV5Y,KAAKwoB,QAAKrpB,EACVa,KAAK+oB,GAAK,EACV/oB,KAAKqoB,IAAK,IAEHtoB,UAAYqT,EAA2BwU,GAAS7nB,WAEvDqnB,KAAM,SAAc6C,EAAaC,GAC/B,IAAIvB,EAAWb,GAAqBxb,GAAmBtM,KAAM4nB,KAO7D,OANAe,EAASF,GAA2B,mBAAfwB,GAA4BA,EACjDtB,EAASG,KAA4B,mBAAdoB,GAA4BA,EACnDvB,EAAS3B,OAAStB,GAAS9B,GAAQoD,YAAS7nB,EAC5Ca,KAAKuoB,GAAGvjB,KAAK2jB,GACT3oB,KAAK0pB,IAAI1pB,KAAK0pB,GAAG1kB,KAAK2jB,GACtB3oB,KAAK0oB,IAAI7B,GAAO7mB,MAAM,GACnB2oB,EAAS7C,SAGlBqE,MAAS,SAAUD,GACjB,OAAOlqB,KAAKonB,UAAKjoB,EAAW+qB,MAGhC/D,GAAuB,WACrB,IAAIL,EAAU,IAAIG,GAClBjmB,KAAK8lB,QAAUA,EACf9lB,KAAK4lB,QAAUjkB,EAAImoB,GAAUhE,EAAS,GACtC9lB,KAAK6lB,OAASlkB,EAAIioB,GAAS9D,EAAS,IAEtCiC,GAA2BrpB,EAAIopB,GAAuB,SAAU9e,GAC9D,OAAOA,IAAM4e,IAAY5e,IAAMod,GAC3B,IAAID,GAAqBnd,GACzBkd,GAA4Bld,KAIpCtI,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAK8mB,IAAcvC,QAASmC,KACpEvU,GAAgCuU,GA7MlB,WA8MdtU,GA9Mc,WA+Md8S,GAAU5S,EAA0B,QAGpC9S,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK8mB,GAlNnB,WAoNZnC,OAAQ,SAAgBvH,GACtB,IAAI8L,EAAatC,GAAqB9nB,MAGtC,OADAgmB,EADeoE,EAAWvE,QACjBvH,GACF8L,EAAWtE,WAGtBplB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAiB8mB,GA3N/B,WA6NZpC,QAAS,SAAiByE,GACxB,OG3Oa,SAAUrhB,EAAGqhB,GAE5B,GADAvsB,EAASkL,GACL/M,EAASouB,IAAMA,EAAEngB,cAAgBlB,EAAG,OAAOqhB,EAC/C,IAAIC,EAAoBxC,GAAqBppB,EAAEsK,GAG/C,OADA4c,EADc0E,EAAkB1E,SACxByE,GACDC,EAAkBxE,QHqOhByE,CAAwDvqB,KAAMqqB,MAGzE3pB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAM8mB,IAAcvU,GAA0B,SAAUf,GAClFkV,GAAS4C,IAAI9X,GAAa,MAAEmV,OAlOhB,WAqOZ2C,IAAK,SAAa5N,GAChB,IAAI5T,EAAIhJ,KACJoqB,EAAatC,GAAqB9e,GAClC4c,EAAUwE,EAAWxE,QACrBC,EAASuE,EAAWvE,OACpBpgB,EAAS4jB,GAAQ,WACnB,IAAIxX,KACAtN,EAAQ,EACRkmB,EAAY,EAChBrM,GAAMxB,GAAU,EAAO,SAAUkJ,GAC/B,IAAI4E,EAASnmB,IACTomB,GAAgB,EACpB9Y,EAAO7M,UAAK7F,GACZsrB,IACAzhB,EAAE4c,QAAQE,GAASsB,KAAK,SAAUnpB,GAC5B0sB,IACJA,GAAgB,EAChB9Y,EAAO6Y,GAAUzsB,IACfwsB,GAAa7E,EAAQ/T,KACtBgU,OAEH4E,GAAa7E,EAAQ/T,KAGzB,OADIpM,EAAOpJ,GAAGwpB,EAAOpgB,EAAOgW,GACrB2O,EAAWtE,SAGpB8E,KAAM,SAAchO,GAClB,IAAI5T,EAAIhJ,KACJoqB,EAAatC,GAAqB9e,GAClC6c,EAASuE,EAAWvE,OACpBpgB,EAAS4jB,GAAQ,WACnBjL,GAAMxB,GAAU,EAAO,SAAUkJ,GAC/B9c,EAAE4c,QAAQE,GAASsB,KAAKgD,EAAWxE,QAASC,OAIhD,OADIpgB,EAAOpJ,GAAGwpB,EAAOpgB,EAAOgW,GACrB2O,EAAWtE,WI3RtB,UAAYvpB,ICIRE,GAAiBF,EAAwBmC,EAC7CmsB,GAAiB,SAAUjqB,GACzB,IAAIkqB,EAAUnvB,EAAKyK,SAAWzK,EAAKyK,OAAwBjL,EAAOiL,YAC5C,KAAlBxF,EAAKmqB,OAAO,IAAenqB,KAAQkqB,GAAUruB,GAAequB,EAASlqB,GAAQ3C,MAAO+sB,GAAOtsB,EAAEkC,MCL/F+F,GAAOpK,GAA0BmC,EACjCnB,MAAcA,SAEd0tB,GAA+B,iBAAV3vB,QAAsBA,QAAUkB,OAAOoJ,oBAC5DpJ,OAAOoJ,oBAAoBtK,iBAUZ,SAA6BS,GAC9C,OAAOkvB,IAAoC,mBAArB1tB,GAASC,KAAKzB,GATjB,SAAUA,GAC7B,IACE,OAAO4K,GAAK5K,GACZ,MAAOM,GACP,OAAO4uB,GAAYpnB,SAK0CqnB,CAAenvB,GAAM4K,GAAK9B,EAAU9I,MCVjG8gB,GAAOtgB,GAAmBwP,IAoB1BkH,GAAOkD,GAAMzX,EACbhB,GAAKuY,EAAIvX,EACTiI,GAAOwkB,GAAQzsB,EACfosB,GAAU3vB,EAAOiL,OACjBglB,GAAQjwB,EAAOkwB,KACfC,GAAaF,IAASA,GAAMG,UAE5BC,GAASxW,GAAI,WACbyW,GAAezW,GAAI,eACnBuL,MAAYxc,qBACZ2nB,GAAiBvmB,EAAO,mBACxBwmB,GAAaxmB,EAAO,WACpBymB,GAAYzmB,EAAO,cACnBuJ,GAAclS,OAAgB,UAC9BwrB,GAA+B,mBAAX8C,GACpBe,GAAU1wB,EAAO0wB,QAEjBhQ,IAAUgQ,KAAYA,GAAiB,YAAMA,GAAiB,UAAEC,UAGhEC,GAAgBxkB,GAAeykB,EAAO,WACxC,OAES,GAFFC,GAAQvuB,MAAO,KACpBhB,IAAK,WAAc,OAAOgB,GAAGsC,KAAM,KAAO/B,MAAO,IAAKtB,MACpDA,IACD,SAAUZ,EAAI0C,EAAKoN,GACtB,IAAIqgB,EAAYjZ,GAAKvE,GAAajQ,GAC9BytB,UAAkBxd,GAAYjQ,GAClCf,GAAG3B,EAAI0C,EAAKoN,GACRqgB,GAAanwB,IAAO2S,IAAahR,GAAGgR,GAAajQ,EAAKytB,IACxDxuB,GAEAyuB,GAAO,SAAU1lB,GACnB,IAAI2lB,EAAMT,GAAWllB,GAAOwlB,GAAQnB,GAAiB,WAErD,OADAsB,EAAIla,GAAKzL,EACF2lB,GAGLC,GAAWrE,IAAyC,iBAApB8C,GAAQhS,SAAuB,SAAU/c,GAC3E,MAAoB,iBAANA,GACZ,SAAUA,GACZ,OAAOA,aAAc+uB,IAGnBwB,GAAkB,SAAwBvwB,EAAI0C,EAAKoN,GAKrD,OAJI9P,IAAO2S,IAAa4d,GAAgBV,GAAWntB,EAAKoN,GACxD/N,EAAS/B,GACT0C,EAAMV,EAAYU,GAAK,GACvBX,EAAS+N,GACLlM,EAAIgsB,GAAYltB,IACboN,EAAEzN,YAIDuB,EAAI5D,EAAIyvB,KAAWzvB,EAAGyvB,IAAQ/sB,KAAM1C,EAAGyvB,IAAQ/sB,IAAO,GAC1DoN,EAAIogB,GAAQpgB,GAAKzN,WAAYO,EAAW,GAAG,OAJtCgB,EAAI5D,EAAIyvB,KAAS9tB,GAAG3B,EAAIyvB,GAAQ7sB,EAAW,OAChD5C,EAAGyvB,IAAQ/sB,IAAO,GAIXstB,GAAchwB,EAAI0C,EAAKoN,IACzBnO,GAAG3B,EAAI0C,EAAKoN,IAEnB0gB,GAAoB,SAA0BxwB,EAAI6B,GACpDE,EAAS/B,GAKT,IAJA,IAGI0C,EAHAuL,ECnFW,SAAUjO,GACzB,IAAI0J,EAAS+H,GAAQzR,GACjBskB,EAAaC,GAAK5hB,EACtB,GAAI2hB,EAKF,IAJA,IAGI5hB,EAHA+tB,EAAUnM,EAAWtkB,GACrBwkB,EAASpN,GAAIzU,EACb+D,EAAI,EAED+pB,EAAQpsB,OAASqC,GAAO8d,EAAO/iB,KAAKzB,EAAI0C,EAAM+tB,EAAQ/pB,OAAOgD,EAAOT,KAAKvG,GAChF,OAAOgH,ED0EEgnB,CAAS7uB,EAAIiH,EAAUjH,IAC9B6E,EAAI,EACJyZ,EAAIlS,EAAK5J,OAEN8b,EAAIzZ,GAAG6pB,GAAgBvwB,EAAI0C,EAAMuL,EAAKvH,KAAM7E,EAAEa,IACrD,OAAO1C,GAKL2wB,GAAwB,SAA8BjuB,GACxD,IAAIkuB,EAAIpM,GAAO/iB,KAAKwC,KAAMvB,EAAMV,EAAYU,GAAK,IACjD,QAAIuB,OAAS0O,IAAe/O,EAAIgsB,GAAYltB,KAASkB,EAAIisB,GAAWntB,QAC7DkuB,IAAMhtB,EAAIK,KAAMvB,KAASkB,EAAIgsB,GAAYltB,IAAQkB,EAAIK,KAAMwrB,KAAWxrB,KAAKwrB,IAAQ/sB,KAAOkuB,IAE/FC,GAA4B,SAAkC7wB,EAAI0C,GAGpE,GAFA1C,EAAK8I,EAAU9I,GACf0C,EAAMV,EAAYU,GAAK,GACnB1C,IAAO2S,KAAe/O,EAAIgsB,GAAYltB,IAASkB,EAAIisB,GAAWntB,GAAlE,CACA,IAAIoN,EAAIoH,GAAKlX,EAAI0C,GAEjB,OADIoN,IAAKlM,EAAIgsB,GAAYltB,IAAUkB,EAAI5D,EAAIyvB,KAAWzvB,EAAGyvB,IAAQ/sB,KAAOoN,EAAEzN,YAAa,GAChFyN,IAELghB,GAAuB,SAA6B9wB,GAKtD,IAJA,IAGI0C,EAHA+G,EAAQmB,GAAK9B,EAAU9I,IACvB0J,KACAhD,EAAI,EAED+C,EAAMpF,OAASqC,GACf9C,EAAIgsB,GAAYltB,EAAM+G,EAAM/C,OAAShE,GAAO+sB,IAAU/sB,GAAOoe,IAAMpX,EAAOT,KAAKvG,GACpF,OAAOgH,GAEPqnB,GAAyB,SAA+B/wB,GAM1D,IALA,IAII0C,EAJAsuB,EAAQhxB,IAAO2S,GACflJ,EAAQmB,GAAKomB,EAAQnB,GAAY/mB,EAAU9I,IAC3C0J,KACAhD,EAAI,EAED+C,EAAMpF,OAASqC,IAChB9C,EAAIgsB,GAAYltB,EAAM+G,EAAM/C,OAAUsqB,IAAQptB,EAAI+O,GAAajQ,IAAcgH,EAAOT,KAAK2mB,GAAWltB,IACxG,OAAOgH,GAINuiB,KAYHpmB,GAXAkpB,GAAU,WACR,GAAI9qB,gBAAgB8qB,GAAS,MAAM5uB,UAAU,gCAC7C,IAAIuK,EAAMtE,EAAI1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAChDqb,EAAO,SAAUvc,GACf+B,OAAS0O,IAAa8L,EAAKhd,KAAKouB,GAAW3tB,GAC3C0B,EAAIK,KAAMwrB,KAAW7rB,EAAIK,KAAKwrB,IAAS/kB,KAAMzG,KAAKwrB,IAAQ/kB,IAAO,GACrEslB,GAAc/rB,KAAMyG,EAAK9H,EAAW,EAAGV,KAGzC,OADIsJ,GAAesU,IAAQkQ,GAAcrd,GAAajI,GAAOpI,cAAc,EAAMqL,IAAK8Q,IAC/E2R,GAAK1lB,KAEY,UAAG,WAAY,WACvC,OAAOzG,KAAKkS,KAGdiE,GAAMzX,EAAIkuB,GACV3W,EAAIvX,EAAI4tB,GACRrvB,GAA0ByB,EAAIysB,GAAQzsB,EAAImuB,GAC1C3vB,GAAyBwB,EAAIguB,GAC7BtZ,GAA0B1U,EAAIouB,GAE1BvlB,GACF3F,EAAS8M,GAAa,uBAAwBge,IAAuB,GAGvE1B,GAAOtsB,EAAI,SAAUkC,GACnB,OAAOurB,GAAKnX,GAAIpU,MAIpBF,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAK8mB,IAAc5hB,OAAQ0kB,KAEnE,IAAK,IAAIkC,GAAa,iHAGpBztB,MAAM,KAAM0K,GAAI,EAAG+iB,GAAW5sB,OAAS6J,IAAG+K,GAAIgY,GAAW/iB,OAE3D,IAAK,IAAIgjB,GAAmBpnB,GAAMmP,GAAIjQ,OAAQgZ,GAAI,EAAGkP,GAAiB7sB,OAAS2d,IAAImP,GAAUD,GAAiBlP,OAE9Grd,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK8mB,GAAY,UAE3CmF,IAAO,SAAU1uB,GACf,OAAOkB,EAAI+rB,GAAgBjtB,GAAO,IAC9BitB,GAAejtB,GACfitB,GAAejtB,GAAOqsB,GAAQrsB,IAGpC2uB,OAAQ,SAAgBhB,GACtB,IAAKC,GAASD,GAAM,MAAMlwB,UAAUkwB,EAAM,qBAC1C,IAAK,IAAI3tB,KAAOitB,GAAgB,GAAIA,GAAejtB,KAAS2tB,EAAK,OAAO3tB,GAE1E4uB,UAAW,WAAcxR,IAAS,GAClCyR,UAAW,WAAczR,IAAS,KAGpCnb,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK8mB,GAAY,UAE3CxZ,OA/FY,SAAgBzS,EAAI6B,GAChC,YAAauB,IAANvB,EAAkBquB,GAAQlwB,GAAMwwB,GAAkBN,GAAQlwB,GAAK6B,IAgGtEnB,eAAgB6vB,GAEhBhf,iBAAkBif,GAElBrZ,yBAA0B0Z,GAE1BhnB,oBAAqBinB,GAErB9M,sBAAuB+M,KAIzB1B,IAAS1qB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAM8mB,IAAcgE,EAAO,WAC9D,IAAI5uB,EAAI0tB,KAIR,MAA0B,UAAnBQ,IAAYluB,KAA2C,MAAxBkuB,IAAa3uB,EAAGS,KAAyC,MAAzBkuB,GAAW9uB,OAAOY,OACrF,QACHmuB,UAAW,SAAmBxvB,GAI5B,IAHA,IAEIwxB,EAAUC,EAFV3L,GAAQ9lB,GACR0G,EAAI,EAEDhC,UAAUL,OAASqC,GAAGof,EAAK7c,KAAKvE,UAAUgC,MAEjD,GADA+qB,EAAYD,EAAW1L,EAAK,IACvB5lB,EAASsxB,SAAoBpuB,IAAPpD,KAAoBswB,GAAStwB,GAMxD,OALKkT,GAAQse,KAAWA,EAAW,SAAU9uB,EAAKR,GAEhD,GADwB,mBAAbuvB,IAAyBvvB,EAAQuvB,EAAUhwB,KAAKwC,KAAMvB,EAAKR,KACjEouB,GAASpuB,GAAQ,OAAOA,IAE/B4jB,EAAK,GAAK0L,EACHjC,GAAW9qB,MAAM4qB,GAAOvJ,MAKnCiJ,GAAiB,UAAEW,KAAiBnY,EAAmBwX,GAAiB,UAAGW,GAAcX,GAAiB,UAAErtB,SAE5GiO,GAAeof,GAAS,UAExBpf,GAAenQ,KAAM,QAAQ,GAE7BmQ,GAAevQ,EAAOkwB,KAAM,QAAQ,GErOpC,IAAAoC,GAAiB,SAAU1hB,EAAK3P,GAC9B,IAAIiB,GAAM1B,EAAKa,YAAcuP,IAAQvP,OAAOuP,GACxC/K,KACJA,EAAI+K,GAAO3P,EAAKiB,GAChBqD,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI2I,EAAM,WAAcxM,EAAG,KAAQ,SAAU2D,ICNvEoc,GAAO7gB,GAAmBihB,SAE9BvgB,GAAyB,SAAU,SAAUywB,GAC3C,OAAO,SAAgB3xB,GACrB,OAAO2xB,GAAWzxB,EAASF,GAAM2xB,EAAQtQ,GAAKrhB,IAAOA,KCJzD,IAAIqhB,GAAO7gB,GAAmBihB,SAE9BvgB,GAAyB,OAAQ,SAAU0wB,GACzC,OAAO,SAAc5xB,GACnB,OAAO4xB,GAAS1xB,EAASF,GAAM4xB,EAAMvQ,GAAKrhB,IAAOA,KCJrD,IAAIqhB,GAAO7gB,GAAmBihB,SAE9BvgB,GAAyB,oBAAqB,SAAUmmB,GACtD,OAAO,SAA2BrnB,GAChC,OAAOqnB,GAAsBnnB,EAASF,GAAMqnB,EAAmBhG,GAAKrhB,IAAOA,KCH/EQ,GAAyB,WAAY,SAAUqxB,GAC7C,OAAO,SAAkB7xB,GACvB,OAAOE,EAASF,MAAM6xB,GAAYA,EAAU7xB,MCFhDQ,GAAyB,WAAY,SAAUsxB,GAC7C,OAAO,SAAkB9xB,GACvB,OAAOE,EAASF,MAAM8xB,GAAYA,EAAU9xB,MCFhDQ,GAAyB,eAAgB,SAAU0mB,GACjD,OAAO,SAAsBlnB,GAC3B,QAAOE,EAASF,MAAMknB,GAAgBA,EAAclnB,OCHxD,IAAI6wB,GAA4BrwB,GAA0BmC,EAE1DzB,GAAyB,2BAA4B,WACnD,OAAO,SAAkClB,EAAI0C,GAC3C,OAAOmuB,GAA0B/nB,EAAU9I,GAAK0C,MCFpDlC,GAAyB,iBAAkB,WACzC,OAAO,SAAwBR,GAC7B,OAAO+xB,GAAgB9nB,GAASjK,OCFpCQ,GAAyB,OAAQ,WAC/B,OAAO,SAAcR,GACnB,OAAO8J,GAAMG,GAASjK,OCL1BQ,GAAyB,sBAAuB,WAC9C,OAAOU,GAA8ByB,ICCvCgC,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAG,UAAY+e,OAAQ1jB,KCFnD,IAAAwxB,GAAiBvxB,OAAOK,IAAM,SAAYwtB,EAAG2D,GAE3C,OAAO3D,IAAM2D,EAAU,IAAN3D,GAAW,EAAIA,GAAM,EAAI2D,EAAI3D,GAAKA,GAAK2D,GAAKA,GCD/DttB,EAAQA,EAAQtD,EAAG,UAAYP,GAAIN,KCFnC,IAAImB,GAAKnB,EAAwBmC,EAC7BuvB,GAASxyB,SAASsE,UAClBmuB,GAAS,wBACF,SAGHD,IAAUhxB,GAA6BS,GAAGuwB,GAHvC,QAIT5vB,cAAc,EACd3B,IAAK,WACH,IACE,OAAQ,GAAKsD,MAAMmuB,MAAMD,IAAQ,GACjC,MAAO7xB,GACP,MAAO,OCRbqE,EAAQA,EAAQtD,EAAG,UAEjBgxB,IAAK,SAAaC,GAMhB,IALA,IAAIC,EAAMzpB,EAAUwpB,EAASD,KACzBjiB,EAAMzI,EAAS4qB,EAAIluB,QACnB6F,EAAOxF,UAAUL,OACjB4P,KACAvN,EAAI,EACD0J,EAAM1J,GACXuN,EAAIhL,KAAKlF,OAAOwuB,EAAI7rB,OAChBA,EAAIwD,GAAM+J,EAAIhL,KAAKlF,OAAOW,UAAUgC,KACxC,OAAOuN,EAAInQ,KAAK,OCbtB,IAAI0uB,GAAezuB,OAAOyuB,aACtBC,GAAiB1uB,OAAO2uB,cAG5B/tB,EAAQA,EAAQtD,EAAIsD,EAAQQ,KAAOstB,IAA2C,GAAzBA,GAAepuB,QAAc,UAEhFquB,cAAe,SAAuBpE,GAKpC,IAJA,IAGIqE,EAHA1e,KACA/J,EAAOxF,UAAUL,OACjBqC,EAAI,EAEDwD,EAAOxD,GAAG,CAEf,GADAisB,GAAQjuB,UAAUgC,KACdqC,EAAgB4pB,EAAM,WAAcA,EAAM,MAAM/qB,WAAW+qB,EAAO,8BACtE1e,EAAIhL,KAAK0pB,EAAO,MACZH,GAAaG,GACbH,GAAyC,QAA1BG,GAAQ,QAAY,IAAcA,EAAO,KAAQ,QAEpE,OAAO1e,EAAInQ,KAAK,OChBtB,IAA2B8uB,GCFvBC,IDEuBD,ICFO,EDGzB,SAAUxuB,EAAM0uB,GACrB,IAGIlyB,EAAG2D,EAHH8H,EAAItI,OAAOsE,EAAQjE,IACnBsC,EAAIc,EAAUsrB,GACd3S,EAAI9T,EAAEhI,OAEV,OAAIqC,EAAI,GAAKA,GAAKyZ,EAAUyS,GAAY,QAAKxvB,GAC7CxC,EAAIyL,EAAE0mB,WAAWrsB,IACN,OAAU9F,EAAI,OAAU8F,EAAI,IAAMyZ,IAAM5b,EAAI8H,EAAE0mB,WAAWrsB,EAAI,IAAM,OAAUnC,EAAI,MACxFquB,GAAYvmB,EAAE2iB,OAAOtoB,GAAK9F,EAC1BgyB,GAAYvmB,EAAEvE,MAAMpB,EAAGA,EAAI,GAA2BnC,EAAI,OAAzB3D,EAAI,OAAU,IAAqB,QCX5E+D,EAAQA,EAAQ9C,EAAG,UAEjBmxB,YAAa,SAAqBF,GAChC,OAAOD,GAAI5uB,KAAM6uB,MCFrB,IAAAG,GAAiB,SAAgBjc,GAC/B,IAAIkc,EAAMnvB,OAAOsE,EAAQpE,OACrBgQ,EAAM,GACN8N,EAAIva,EAAUwP,GAClB,GAAI+K,EAAI,GAAKA,GAAK9W,EAAAA,EAAU,MAAMrD,WAAW,2BAC7C,KAAMma,EAAI,GAAIA,KAAO,KAAOmR,GAAOA,GAAc,EAAJnR,IAAO9N,GAAOif,GAC3D,OAAOjf,GCRTtP,EAAQA,EAAQ9C,EAAG,UAEjBsxB,OAAQ3yB,KCDV,IAAI4yB,GAAQ5yB,GAAkB,SAC9B6yB,GAAiB,SAAUrzB,GACzB,IAAIszB,EACJ,OAAOpzB,EAASF,UAAmCoD,KAA1BkwB,EAAWtzB,EAAGozB,OAA0BE,EAAsB,UAAXrrB,EAAIjI,KCFlFuzB,GAAiB,SAAUnvB,EAAMovB,EAAchf,GAC7C,GAAI8e,GAASE,GAAe,MAAMrzB,UAAU,UAAYqU,EAAO,0BAC/D,OAAOzQ,OAAOsE,EAAQjE,KCNpBgvB,GAAQ5yB,GAAkB,SAC9BizB,GAAiB,SAAUzjB,GACzB,IAAI0jB,EAAK,IACT,IACE,MAAM1jB,GAAK0jB,GACX,MAAOpzB,GACP,IAEE,OADAozB,EAAGN,KAAS,GACJ,MAAMpjB,GAAK0jB,GACnB,MAAO/wB,KACT,OAAO,GCJPgxB,GAAc,GAAc,WAEhChvB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAHd,cAG0D,UAC1EozB,WAAY,SAAoBJ,GAC9B,IAAIpvB,EAAOyvB,GAAQ5vB,KAAMuvB,EALX,cAMVhrB,EAAQb,EAASnI,KAAK8H,IAAI5C,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAWgB,EAAKC,SAChFyvB,EAAS/vB,OAAOyvB,GACpB,OAAOG,GACHA,GAAYlyB,KAAK2C,EAAM0vB,EAAQtrB,GAC/BpE,EAAK0D,MAAMU,EAAOA,EAAQsrB,EAAOzvB,UAAYyvB,KCVrD,IACIC,GAAY,GAAY,SAE5BpvB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAHhB,YAG0D,UACxEwzB,SAAU,SAAkBR,GAC1B,IAAIpvB,EAAOyvB,GAAQ5vB,KAAMuvB,EALb,YAMRS,EAAcvvB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EACpDgN,EAAMzI,EAASvD,EAAKC,QACpB8F,OAAsB/G,IAAhB6wB,EAA4B7jB,EAAM5Q,KAAK8H,IAAIK,EAASssB,GAAc7jB,GACxE0jB,EAAS/vB,OAAOyvB,GACpB,OAAOO,GACHA,GAAUtyB,KAAK2C,EAAM0vB,EAAQ3pB,GAC7B/F,EAAK0D,MAAMqC,EAAM2pB,EAAOzvB,OAAQ8F,KAAS2pB,KCXjDnvB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAFjB,YAE0D,UACvEud,SAAU,SAAkByV,GAC1B,SAAUK,GAAQ5vB,KAAMuvB,EAJb,YAKR3V,QAAQ2V,EAAc9uB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MCR/D5C,GAA2C,KAAd,KAAK0zB,OAAchzB,EAAwByB,EAAEwxB,OAAOnwB,UAAW,SAC9F1B,cAAc,EACd3B,ICAe,WACf,IAAIyD,EAAOrC,EAASkC,MAChByF,EAAS,GAMb,OALItF,EAAKhF,SAAQsK,GAAU,KACvBtF,EAAKgwB,aAAY1qB,GAAU,KAC3BtF,EAAKiwB,YAAW3qB,GAAU,KAC1BtF,EAAKkwB,UAAS5qB,GAAU,KACxBtF,EAAKmwB,SAAQ7qB,GAAU,KACpBA,KCJT,IAAA8qB,GAAiB,SAAUxkB,EAAK3L,EAAQhE,GACtC,IAAIo0B,EAASxb,GAAIjJ,GACb0kB,EAAMr0B,EAAKgI,EAASosB,EAAQ,GAAGzkB,IAC/B2kB,EAAQD,EAAI,GACZE,EAAOF,EAAI,GACX5mB,EAAM,WACR,IAAIlM,KAEJ,OADAA,EAAE6yB,GAAU,WAAc,OAAO,GACZ,GAAd,GAAGzkB,GAAKpO,OAEfiE,EAAS9B,OAAOC,UAAWgM,EAAK2kB,GAChC9wB,EAAKswB,OAAOnwB,UAAWywB,EAAkB,GAAVpwB,EAG3B,SAAUwwB,EAAQ1hB,GAAO,OAAOyhB,EAAKnzB,KAAKozB,EAAQ5wB,KAAMkP,IAGxD,SAAU0hB,GAAU,OAAOD,EAAKnzB,KAAKozB,EAAQ5wB,UCvBrDzD,GAAyB,QAAS,EAAG,SAAU6H,EAAS+qB,EAAO0B,GAE7D,OAAQ,SAAeC,GAErB,IAAInzB,EAAIyG,EAAQpE,MACZ3C,EAAe8B,MAAV2xB,OAAsB3xB,EAAY2xB,EAAO3B,GAClD,YAAchwB,IAAP9B,EAAmBA,EAAGG,KAAKszB,EAAQnzB,GAAK,IAAIuyB,OAAOY,GAAQ3B,GAAOrvB,OAAOnC,KAC/EkzB,KCPLt0B,GAAyB,UAAW,EAAG,SAAU6H,EAAS2sB,EAASC,GAEjE,OAAQ,SAAiBC,EAAaC,GAEpC,IAAIvzB,EAAIyG,EAAQpE,MACZ3C,EAAoB8B,MAAf8xB,OAA2B9xB,EAAY8xB,EAAYF,GAC5D,YAAc5xB,IAAP9B,EACHA,EAAGG,KAAKyzB,EAAatzB,EAAGuzB,GACxBF,EAASxzB,KAAKsC,OAAOnC,GAAIszB,EAAaC,IACzCF,KCTLz0B,GAAyB,QAAS,EAAG,SAAU6H,EAAS+sB,EAAOC,GAE7D,IAAI/B,EAAWpyB,GACXo0B,EAASD,EACTE,KAAWtsB,KAIf,GAC+B,KAA7B,OAAa,MAAE,QAAQ,IACe,GAAtC,OAAa,MAAE,QAAS,GAAS,QACE,GAAnC,KAAW,MAAE,WAAiB,QACK,GAAnC,IAAU,MAAE,YAAkB,QAC9B,IAAU,MAAE,QAAc,OAAI,GAC9B,GAAS,MAAE,MAAY,OACvB,CACA,IAAIusB,OAA8BpyB,IAAvB,OAAO/C,KAAK,IAAI,GAE3Bg1B,EAAS,SAAUrX,EAAWyX,GAC5B,IAAIZ,EAAS9wB,OAAOE,MACpB,QAAkBb,IAAd4a,GAAqC,IAAVyX,EAAa,SAE5C,IAAKnC,EAAStV,GAAY,OAAOsX,EAAO7zB,KAAKozB,EAAQ7W,EAAWyX,GAChE,IASIC,EAAYtD,EAAOuD,EAAWC,EAAYlvB,EAT1CmvB,KACA3B,GAASlW,EAAUoW,WAAa,IAAM,KAC7BpW,EAAUqW,UAAY,IAAM,KAC5BrW,EAAUsW,QAAU,IAAM,KAC1BtW,EAAUuW,OAAS,IAAM,IAClCuB,EAAgB,EAChBC,OAAuB3yB,IAAVqyB,EAAsB,WAAaA,IAAU,EAE1DO,EAAgB,IAAI7B,OAAOnW,EAAUlZ,OAAQovB,EAAQ,KAIzD,IADKsB,IAAME,EAAa,IAAIvB,OAAO,IAAM6B,EAAclxB,OAAS,WAAYovB,KACrE9B,EAAQ4D,EAAc31B,KAAKw0B,QAEhCc,EAAYvD,EAAM5pB,MAAQ4pB,EAAM,GAAS,QACzB0D,IACdD,EAAO5sB,KAAK4rB,EAAO/sB,MAAMguB,EAAe1D,EAAM5pB,SAGzCgtB,GAAQpD,EAAY,OAAI,GAAGA,EAAM,GAAG6D,QAAQP,EAAY,WAC3D,IAAKhvB,EAAI,EAAGA,EAAIhC,UAAgB,OAAI,EAAGgC,SAA0BtD,IAAjBsB,UAAUgC,KAAkB0rB,EAAM1rB,QAAKtD,KAErFgvB,EAAY,OAAI,GAAKA,EAAM5pB,MAAQqsB,EAAa,QAAGU,EAAM9wB,MAAMoxB,EAAQzD,EAAMtqB,MAAM,IACvF8tB,EAAaxD,EAAM,GAAS,OAC5B0D,EAAgBH,EACZE,EAAa,QAAKE,KAEpBC,EAAwB,YAAM5D,EAAM5pB,OAAOwtB,EAAwB,YAKzE,OAHIF,IAAkBjB,EAAa,QAC7Be,GAAeI,EAAchT,KAAK,KAAK6S,EAAO5sB,KAAK,IAClD4sB,EAAO5sB,KAAK4rB,EAAO/sB,MAAMguB,IACzBD,EAAa,OAAIE,EAAaF,EAAO/tB,MAAM,EAAGiuB,GAAcF,OAG5D,IAAU,WAAEzyB,EAAW,GAAS,SACzCiyB,EAAS,SAAUrX,EAAWyX,GAC5B,YAAqBryB,IAAd4a,GAAqC,IAAVyX,KAAmBH,EAAO7zB,KAAKwC,KAAM+Z,EAAWyX,KAItF,OAAQ,SAAezX,EAAWyX,GAChC,IAAI7zB,EAAIyG,EAAQpE,MACZ3C,EAAkB8B,MAAb4a,OAAyB5a,EAAY4a,EAAUoX,GACxD,YAAchyB,IAAP9B,EAAmBA,EAAGG,KAAKuc,EAAWpc,EAAG6zB,GAASJ,EAAO5zB,KAAKsC,OAAOnC,GAAIoc,EAAWyX,IAC1FJ,KCpEL70B,GAAyB,SAAU,EAAG,SAAU6H,EAAS6tB,EAAQC,GAE/D,OAAQ,SAAgBpB,GAEtB,IAAInzB,EAAIyG,EAAQpE,MACZ3C,EAAe8B,MAAV2xB,OAAsB3xB,EAAY2xB,EAAOmB,GAClD,YAAc9yB,IAAP9B,EAAmBA,EAAGG,KAAKszB,EAAQnzB,GAAK,IAAIuyB,OAAOY,GAAQmB,GAAQnyB,OAAOnC,KAChFu0B,KCJL,IAAAC,GAAiB,SAAU3zB,EAAQ+F,EAAOtG,GACpCsG,KAAS/F,EAAQ8tB,EAAgB5tB,EAAEF,EAAQ+F,EAAO5F,EAAW,EAAGV,IAC/DO,EAAO+F,GAAStG,GCIvByC,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK3E,GAA0B,SAAUmW,MAA8B,SAEjGI,KAAM,SAAc2H,GAClB,IAOIra,EAAQqF,EAAQ0M,EAAM2G,EAPtBnb,EAAIqI,GAASyU,GACbzR,EAAmB,mBAARhJ,KAAqBA,KAAO+H,MACvC9B,EAAOxF,UAAUL,OACjB2Y,EAAQ9S,EAAO,EAAIxF,UAAU,QAAKtB,EAClC6Z,OAAoB7Z,IAAV4Z,EACVxU,EAAQ,EACR0U,EAASpE,GAAUlX,GAIvB,GAFIqb,IAASD,EAAQpX,EAAIoX,EAAO9S,EAAO,EAAIxF,UAAU,QAAKtB,EAAW,IAEvDA,MAAV8Z,GAAyBjQ,GAAKjB,OAASyM,GAAYyE,GAMrD,IAAKxT,EAAS,IAAIuD,EADlB5I,EAASsD,EAAS/F,EAAEyC,SACSA,EAASmE,EAAOA,IAC3C6tB,GAAe3sB,EAAQlB,EAAOyU,EAAUD,EAAMpb,EAAE4G,GAAQA,GAAS5G,EAAE4G,SANrE,IAAKuU,EAAWG,EAAOzb,KAAKG,GAAI8H,EAAS,IAAIuD,IAAOmJ,EAAO2G,EAAStI,QAAQJ,KAAM7L,IAChF6tB,GAAe3sB,EAAQlB,EAAOyU,EAAUxb,GAAKsb,EAAUC,GAAQ5G,EAAKlU,MAAOsG,IAAQ,GAAQ4N,EAAKlU,OASpG,OADAwH,EAAOrF,OAASmE,EACTkB,KC7BX/E,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,SAAS2E,KACT,QAAS6G,MAAMuU,GAAG9e,KAAK0D,aAAcA,KACnC,SAEFob,GAAI,WAIF,IAHA,IAAI/X,EAAQ,EACR0B,EAAOxF,UAAUL,OACjBqF,EAAS,IAAoB,mBAARzF,KAAqBA,KAAO+H,OAAO9B,GACrDA,EAAO1B,GAAO6tB,GAAe3sB,EAAQlB,EAAO9D,UAAU8D,MAE7D,OADAkB,EAAOrF,OAAS6F,EACTR,KCbX/E,EAAQA,EAAQ9C,EAAG,SAAWgV,WAAYrW,KAE1CU,GAAiC,cCFjC,IAAIo1B,GAAQ91B,GAA4B,GAEpC+1B,IAAS,EADH,YAGKvqB,MAAM,GAAM,KAAE,WAAcuqB,IAAS,IACpD5xB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAIoxB,GAAQ,SACtC9Y,KAAM,SAAczJ,GAClB,OAAOsiB,GAAMryB,KAAM+P,EAAYtP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,QCDV,IAAIo1B,GAAQ91B,GAA4B,GAEpC+1B,IAAS,EADH,iBAGKvqB,MAAM,GAAM,UAAE,WAAcuqB,IAAS,IACpD5xB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAIoxB,GAAQ,SACtC5Y,UAAW,SAAmB3J,GAC5B,OAAOsiB,GAAMryB,KAAM+P,EAAYtP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,aCDVyD,EAAQA,EAAQ9C,EAAG,SAAW0b,KAAM/c,KAEpCU,GAAiC,QCHjC,IAAIs1B,GAAYh2B,EAAqBi2B,SAErC9xB,EAAQA,EAAQtD,EAAG,UACjBo1B,SAAU,SAAkBz2B,GAC1B,MAAoB,iBAANA,GAAkBw2B,GAAUx2B,MCJ9C,IAAImH,GAAQ3H,KAAK2H,MACjBuvB,GAAiB,SAAmB12B,GAClC,OAAQE,EAASF,IAAOy2B,SAASz2B,IAAOmH,GAAMnH,KAAQA,GCDxD2E,EAAQA,EAAQtD,EAAG,UAAYs1B,UAAWn2B,KCA1C,IAAI2K,GAAM3L,KAAK2L,IAEfxG,EAAQA,EAAQtD,EAAG,UACjBu1B,cAAe,SAAuBlvB,GACpC,OAAOivB,GAAUjvB,IAAWyD,GAAIzD,IAAW,oBCJ/C/C,EAAQA,EAAQtD,EAAG,UACjBgG,MAAO,SAAeK,GAEpB,OAAOA,GAAUA,KCHrB/C,EAAQA,EAAQtD,EAAG,UAAYw1B,QAASr3B,KAAK4L,IAAI,GAAI,MCArDzG,EAAQA,EAAQtD,EAAG,UAAYy1B,kBAAmB,mBCAlDnyB,EAAQA,EAAQtD,EAAG,UAAY01B,iBAAkB,mBCFjD,IAAAC,GAAiBx3B,KAAKy3B,OAAS,SAAe3I,GAC5C,OAAQA,GAAKA,IAAM,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAI9uB,KAAK6L,IAAI,EAAIijB,ICCjE4I,GAAO13B,KAAK03B,KACZC,GAAS33B,KAAK43B,MAElBzyB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMgyB,IAEW,KAAxC33B,KAAK2H,MAAMgwB,GAAOE,OAAOC,aAEzBH,GAAOlsB,EAAAA,IAAaA,EAAAA,GACtB,QACDmsB,MAAO,SAAe9I,GACpB,OAAQA,GAAKA,GAAK,EAAI9hB,IAAM8hB,EAAI,kBAC5B9uB,KAAK6L,IAAIijB,GAAK9uB,KAAK8L,IACnB2rB,GAAM3I,EAAI,EAAI4I,GAAK5I,EAAI,GAAK4I,GAAK5I,EAAI,OCb7C,IAAIiJ,GAAS/3B,KAAKg4B,MAOlB7yB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMoyB,IAAU,EAAIA,GAAO,GAAK,GAAI,QAAUC,MAL1E,SAASA,EAAMlJ,GACb,OAAQmI,SAASnI,GAAKA,IAAW,GAALA,EAAaA,EAAI,GAAKkJ,GAAOlJ,GAAK9uB,KAAK6L,IAAIijB,EAAI9uB,KAAK03B,KAAK5I,EAAIA,EAAI,IAAxDA,KCHvC,IAAImJ,GAASj4B,KAAKk4B,MAGlB/yB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMsyB,IAAU,EAAIA,IAAQ,GAAK,GAAI,QAC/DC,MAAO,SAAepJ,GACpB,OAAmB,IAAXA,GAAKA,GAAUA,EAAI9uB,KAAK6L,KAAK,EAAIijB,IAAM,EAAIA,IAAM,KCN7D,IAAAqJ,GAAiBn4B,KAAKo4B,MAAQ,SAActJ,GAE1C,OAAmB,IAAXA,GAAKA,IAAWA,GAAKA,EAAIA,EAAIA,EAAI,GAAK,EAAI,GCCpD3pB,EAAQA,EAAQtD,EAAG,QACjBw2B,KAAM,SAAcvJ,GAClB,OAAOsJ,GAAKtJ,GAAKA,GAAK9uB,KAAK4L,IAAI5L,KAAK2L,IAAImjB,GAAI,EAAI,MCHpD3pB,EAAQA,EAAQtD,EAAG,QACjBy2B,MAAO,SAAexJ,GACpB,OAAQA,KAAO,GAAK,GAAK9uB,KAAK2H,MAAM3H,KAAK6L,IAAIijB,EAAI,IAAO9uB,KAAKu4B,OAAS,MCH1E,IAAI9yB,GAAMzF,KAAKyF,IAEfN,EAAQA,EAAQtD,EAAG,QACjB22B,KAAM,SAAc1J,GAClB,OAAQrpB,GAAIqpB,GAAKA,GAAKrpB,IAAKqpB,IAAM,KCLrC,IAAI2J,GAASz4B,KAAK04B,MAClBC,IAAmBF,IAEdA,GAAO,IAAM,oBAAsBA,GAAO,IAAM,qBAE7B,OAAnBA,IAAQ,OACT,SAAe3J,GACjB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIA,GAAK,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAI9uB,KAAKyF,IAAIqpB,GAAK,GAC/E2J,GCLJtzB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK8yB,IAAUz4B,KAAK04B,OAAQ,QAAUA,MAAOD,KCFzE,IAAI7sB,GAAM5L,KAAK4L,IACXyrB,GAAUzrB,GAAI,GAAI,IAClBgtB,GAAYhtB,GAAI,GAAI,IACpBitB,GAAQjtB,GAAI,EAAG,MAAQ,EAAIgtB,IAC3BE,GAAQltB,GAAI,GAAI,KAMpBmtB,GAAiB/4B,KAAKg5B,QAAU,SAAgBlK,GAC9C,IAEI1tB,EAAG8I,EAFH+uB,EAAOj5B,KAAK2L,IAAImjB,GAChBoK,EAAQd,GAAKtJ,GAEjB,OAAImK,EAAOH,GAAcI,GAAwBD,EAAOH,GAAQF,GAPrD,EAAIvB,GAAU,EAAIA,IAOgDyB,GAAQF,IAErF1uB,GADA9I,GAAK,EAAIw3B,GAAYvB,IAAW4B,IAClB73B,EAAI63B,IAELJ,IAAS3uB,GAAUA,EAAegvB,GAAQztB,EAAAA,GAChDytB,EAAQhvB,GClBjB/E,EAAQA,EAAQtD,EAAG,QAAUm3B,OAAQh4B,KCDrC,IAAI2K,GAAM3L,KAAK2L,IAEfxG,EAAQA,EAAQtD,EAAG,QACjBs3B,MAAO,SAAeC,EAAQC,GAM5B,IALA,IAII1lB,EAAK2lB,EAJLC,EAAM,EACNryB,EAAI,EACJwD,EAAOxF,UAAUL,OACjB20B,EAAO,EAEJtyB,EAAIwD,GAEL8uB,GADJ7lB,EAAMhI,GAAIzG,UAAUgC,QAGlBqyB,EAAMA,GADND,EAAME,EAAO7lB,GACK2lB,EAAM,EACxBE,EAAO7lB,GAGP4lB,GAFS5lB,EAAM,GACf2lB,EAAM3lB,EAAM6lB,GACCF,EACD3lB,EAEhB,OAAO6lB,IAAS/tB,EAAAA,EAAWA,EAAAA,EAAW+tB,EAAOx5B,KAAK03B,KAAK6B,MCpB3D,IAAIE,GAAQz5B,KAAK05B,KAGjBv0B,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,OAAgC,GAAzBy4B,GAAM,WAAY,IAA4B,GAAhBA,GAAM50B,SACzC,QACF60B,KAAM,SAAc5K,EAAG2D,GACrB,IACIkH,GAAM7K,EACN8K,GAAMnH,EACNoH,EAHS,MAGKF,EACdG,EAJS,MAIKF,EAClB,OAAO,EAAIC,EAAKC,IALH,MAKmBH,IAAO,IAAMG,EAAKD,GALrC,MAKoDD,IAAO,KAAO,KAAO,MCX1Fz0B,EAAQA,EAAQtD,EAAG,QAAU41B,MAAOz2B,KCApCmE,EAAQA,EAAQtD,EAAG,QACjBk4B,MAAO,SAAejL,GACpB,OAAO9uB,KAAK6L,IAAIijB,GAAK9uB,KAAKg6B,UCF9B70B,EAAQA,EAAQtD,EAAG,QACjBo4B,KAAM,SAAcnL,GAClB,OAAO9uB,KAAK6L,IAAIijB,GAAK9uB,KAAK8L,OCF9B3G,EAAQA,EAAQtD,EAAG,QAAUu2B,KAAMp3B,KCAnC,IAAIyE,GAAMzF,KAAKyF,IAGfN,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,OAA8B,QAAtBhB,KAAKk6B,MAAM,SACjB,QACFA,KAAM,SAAcpL,GAClB,OAAO9uB,KAAK2L,IAAImjB,GAAKA,GAAK,GACrB4J,GAAM5J,GAAK4J,IAAO5J,IAAM,GACxBrpB,GAAIqpB,EAAI,GAAKrpB,IAAKqpB,EAAI,KAAO9uB,KAAKoxB,EAAI,MCT/C,IAAI3rB,GAAMzF,KAAKyF,IAEfN,EAAQA,EAAQtD,EAAG,QACjBs4B,KAAM,SAAcrL,GAClB,IAAI1tB,EAAIs3B,GAAM5J,GAAKA,GACf/pB,EAAI2zB,IAAO5J,GACf,OAAO1tB,GAAKqK,EAAAA,EAAW,EAAI1G,GAAK0G,EAAAA,GAAY,GAAKrK,EAAI2D,IAAMU,GAAIqpB,GAAKrpB,IAAKqpB,OCN7E3pB,EAAQA,EAAQtD,EAAG,QACjBu4B,MAAO,SAAe55B,GACpB,OAAQA,EAAK,EAAIR,KAAK2H,MAAQ3H,KAAK0H,MAAMlH,MCF7C,IAAI65B,GAAYr5B,GAA6B,GAE7CmE,EAAQA,EAAQ9C,EAAG,SACjBkc,SAAU,SAAkBnV,GAC1B,OAAOixB,GAAU51B,KAAM2E,EAAIlE,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAIrElC,GAAiC,YCTjC,IAAIsjB,GAAShkB,GAAyBmC,EACtCm3B,GAAiB,SAAUC,GACzB,OAAO,SAAU/5B,GAOf,IANA,IAKI0C,EALAd,EAAIkH,EAAU9I,GACdiO,EAAOwD,GAAQ7P,GACfyC,EAAS4J,EAAK5J,OACdqC,EAAI,EACJgD,KAEGrF,EAASqC,GAAO8d,GAAO/iB,KAAKG,EAAGc,EAAMuL,EAAKvH,OAC/CgD,EAAOT,KAAK8wB,GAAar3B,EAAKd,EAAEc,IAAQd,EAAEc,IAC1C,OAAOgH,ICXTswB,GAAUx5B,IAA8B,GAE5CmE,EAAQA,EAAQtD,EAAG,UACjByU,OAAQ,SAAgB9V,GACtB,OAAOg6B,GAAQh6B,MCJnB,IAAI2V,GAAWnV,IAA8B,GAE7CmE,EAAQA,EAAQtD,EAAG,UACjBwU,QAAS,SAAiB7V,GACxB,OAAO2V,GAAS3V,MCCpB2E,EAAQA,EAAQtD,EAAG,UACjB44B,0BAA2B,SAAmCx3B,GAO5D,IANA,IAKIC,EAAKqc,EALLnd,EAAIkH,EAAUrG,GACdy3B,EAAUhjB,GAAKvU,EACfsL,EAAOmZ,GAAQxlB,GACf8H,KACAhD,EAAI,EAEDuH,EAAK5J,OAASqC,QAENtD,KADb2b,EAAOmb,EAAQt4B,EAAGc,EAAMuL,EAAKvH,QACL2vB,GAAe3sB,EAAQhH,EAAKqc,GAEtD,OAAOrV,KCdX,IAAAywB,GAAiB,SAAU/1B,EAAMg2B,EAAWC,EAAYC,GACtD,IAAIj5B,EAAI0C,OAAOsE,EAAQjE,IACnBm2B,EAAel5B,EAAEgD,OACjBm2B,OAAyBp3B,IAAfi3B,EAA2B,IAAMt2B,OAAOs2B,GAClDI,EAAe9yB,EAASyyB,GAC5B,GAAIK,GAAgBF,GAA2B,IAAXC,EAAe,OAAOn5B,EAC1D,IAAIq5B,EAAUD,EAAeF,EACzBI,EAAexH,GAAO1xB,KAAK+4B,EAASh7B,KAAK0H,KAAKwzB,EAAUF,EAAQn2B,SAEpE,OADIs2B,EAAat2B,OAASq2B,IAASC,EAAeA,EAAa7yB,MAAM,EAAG4yB,IACjEJ,EAAOK,EAAet5B,EAAIA,EAAIs5B,GCPvCh2B,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI,oCAAoC6d,KAAKyH,IAAY,UACnFmQ,SAAU,SAAkBR,GAC1B,OAAOS,GAAK52B,KAAMm2B,EAAW11B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCFlFuB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI,oCAAoC6d,KAAKyH,IAAY,UACnFqQ,OAAQ,SAAgBV,GACtB,OAAOS,GAAK52B,KAAMm2B,EAAW11B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCLlF,IAAI0E,MAAWA,MACXizB,GAAO,WAAW/X,KAAKyH,IACvB2F,GAAO,SAAUziB,GACnB,OAAO,SAAUrM,EAAI05B,GACnB,IAAIC,EAAYv2B,UAAUL,OAAS,EAC/ByhB,IAAOmV,GAAYnzB,GAAMrG,KAAKiD,UAAW,GAC7C,OAAOiJ,EAAIstB,EAAY,YAEP,mBAAN35B,EAAmBA,EAAK5B,SAAS4B,IAAKmD,MAAMR,KAAM6hB,IACxDxkB,EAAI05B,KAGZr2B,EAAQA,EAAQU,EAAIV,EAAQc,EAAId,EAAQQ,EAAI41B,IAC1C3R,WAAYgH,GAAKhxB,EAAOgqB,YACxB8R,YAAa9K,GAAKhxB,EAAO87B,eChB3Bv2B,EAAQA,EAAQU,EAAIV,EAAQc,GAC1BsiB,aAAcoT,GAAMxtB,IACpBsa,eAAgBkT,GAAM7Y,QCyCxB,IAtCA,IAAItR,GAAWiI,GAAI,YACfmiB,GAAgBniB,GAAI,eACpBoiB,GAAclqB,GAAUnF,MAExBsvB,IACFC,aAAa,EACbC,qBAAqB,EACrBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,sBAAsB,EACtBC,UAAU,EACVC,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,UAAU,EACVC,kBAAkB,EAClBC,QAAQ,EACRC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,WAAW,GAGJC,GAAc7rB,GAAQ6pB,IAAe50B,GAAI,EAAGA,GAAI42B,GAAYj5B,OAAQqC,KAAK,CAChF,IAIIhE,GAJA8R,GAAO8oB,GAAY52B,IACnB62B,GAAWjC,GAAa9mB,IACxBgpB,GAAap+B,EAAOoV,IACpBc,GAAQkoB,IAAcA,GAAWx5B,UAErC,GAAIsR,KACGA,GAAMtE,KAAWnN,EAAKyR,GAAOtE,GAAUqqB,IACvC/lB,GAAM8lB,KAAgBv3B,EAAKyR,GAAO8lB,GAAe5mB,IACtDrD,GAAUqD,IAAQ6mB,GACdkC,IAAU,IAAK76B,MAAOic,GAAiBrJ,GAAM5S,KAAMmD,EAASyP,GAAO5S,GAAKic,GAAWjc,KAAM,kBC7ChG,SAAUtD,GAGT,IAEIgE,EAFAq6B,EAAKh9B,OAAOuD,UACZ05B,EAASD,EAAG56B,eAEZksB,EAA4B,mBAAX1kB,OAAwBA,UACzCszB,EAAiB5O,EAAQhS,UAAY,aACrC6gB,EAAsB7O,EAAQ8O,eAAiB,kBAC/CC,EAAoB/O,EAAQgP,aAAe,gBAG3CC,EAAU5+B,EAAO6+B,mBACrB,GAAID,EAIA3+B,EAAAC,QAAiB0+B,MAJrB,EAaAA,EAAU5+B,EAAO6+B,mBAAgC5+B,EAAOC,SAchD8wB,KAAOA,EAoBf,IAAI8N,EAAyB,iBACzBC,EAAyB,iBACzBC,EAAoB,YACpBC,EAAoB,YAIpBC,KAYAhqB,KACJA,EAAkBqpB,GAAkB,WAClC,OAAO15B,MAGT,IAAIgjB,EAAWxmB,OAAOoS,eAClB0rB,EAA0BtX,GAAYA,EAASA,EAASnR,QACxDyoB,GACAA,IAA4Bd,GAC5BC,EAAOj8B,KAAK88B,EAAyBZ,KAGvCrpB,EAAoBiqB,GAGtB,IAAIC,EAAKC,EAA2Bz6B,UAClC06B,EAAU16B,UAAYvD,OAAOgS,OAAO6B,GACtCqqB,EAAkB36B,UAAYw6B,EAAGrwB,YAAcswB,EAC/CA,EAA2BtwB,YAAcwwB,EACzCF,EAA2BX,GACzBa,EAAkBC,YAAc,oBAYlCZ,EAAQa,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,mBAAXD,GAAyBA,EAAO3wB,YAClD,QAAO4wB,IACHA,IAASJ,GAG2B,uBAAnCI,EAAKH,aAAeG,EAAKl6B,QAIhCm5B,EAAQgB,KAAO,SAASF,GAUtB,OATIr+B,OAAOsiB,eACTtiB,OAAOsiB,eAAe+b,EAAQL,IAE9BK,EAAO5b,UAAYub,EACbX,KAAqBgB,IACzBA,EAAOhB,GAAqB,sBAGhCgB,EAAO96B,UAAYvD,OAAOgS,OAAO+rB,GAC1BM,GAOTd,EAAQiB,MAAQ,SAAS9rB,GACvB,OAAS+rB,QAAS/rB,IAkFpBgsB,EAAsBC,EAAcp7B,WACpCo7B,EAAcp7B,UAAU45B,GAAuB,WAC7C,OAAO35B,MAET+5B,EAAQoB,cAAgBA,EAKxBpB,EAAQqB,MAAQ,SAASC,EAASC,EAAS9/B,EAAM+/B,GAC/C,IAAI7oB,EAAO,IAAIyoB,EACbhP,EAAKkP,EAASC,EAAS9/B,EAAM+/B,IAG/B,OAAOxB,EAAQa,oBAAoBU,GAC/B5oB,EACAA,EAAKlC,OAAO4W,KAAK,SAAS3hB,GACxB,OAAOA,EAAO2K,KAAO3K,EAAOxH,MAAQyU,EAAKlC,UAsKjD0qB,EAAsBX,GAEtBA,EAAGV,GAAqB,YAOxBU,EAAGb,GAAkB,WACnB,OAAO15B,MAGTu6B,EAAGh9B,SAAW,WACZ,MAAO,sBAkCTw8B,EAAQ/vB,KAAO,SAASxL,GACtB,IAAIwL,KACJ,IAAK,IAAIvL,KAAOD,EACdwL,EAAKhF,KAAKvG,GAMZ,OAJAuL,EAAKP,UAIE,SAAS+G,IACd,KAAOxG,EAAK5J,QAAQ,CAClB,IAAI3B,EAAMuL,EAAKwxB,MACf,GAAI/8B,KAAOD,EAGT,OAFAgS,EAAKvS,MAAQQ,EACb+R,EAAKJ,MAAO,EACLI,EAQX,OADAA,EAAKJ,MAAO,EACLI,IAsCXupB,EAAQloB,OAASA,EAMjB4pB,EAAQ17B,WACNmK,YAAauxB,EAEbC,MAAO,SAASC,GAcd,GAbA37B,KAAKye,KAAO,EACZze,KAAKwQ,KAAO,EAGZxQ,KAAK47B,KAAO57B,KAAK67B,MAAQ18B,EACzBa,KAAKoQ,MAAO,EACZpQ,KAAK87B,SAAW,KAEhB97B,KAAKqhB,OAAS,OACdrhB,KAAKkP,IAAM/P,EAEXa,KAAK+7B,WAAWpiB,QAAQqiB,IAEnBL,EACH,IAAK,IAAI/6B,KAAQZ,KAEQ,MAAnBY,EAAKmqB,OAAO,IACZ0O,EAAOj8B,KAAKwC,KAAMY,KACjBwC,OAAOxC,EAAKiD,MAAM,MACrB7D,KAAKY,GAAQzB,IAMrB88B,KAAM,WACJj8B,KAAKoQ,MAAO,EAEZ,IACI8rB,EADYl8B,KAAK+7B,WAAW,GACLI,WAC3B,GAAwB,UAApBD,EAAWv7B,KACb,MAAMu7B,EAAWhtB,IAGnB,OAAOlP,KAAKo8B,MAGdC,kBAAmB,SAASC,GAC1B,GAAIt8B,KAAKoQ,KACP,MAAMksB,EAGR,IAAI1M,EAAU5vB,KACd,SAASu8B,EAAOC,EAAKC,GAYnB,OAXAC,EAAO/7B,KAAO,QACd+7B,EAAOxtB,IAAMotB,EACb1M,EAAQpf,KAAOgsB,EAEXC,IAGF7M,EAAQvO,OAAS,OACjBuO,EAAQ1gB,IAAM/P,KAGNs9B,EAGZ,IAAK,IAAIh6B,EAAIzC,KAAK+7B,WAAW37B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAImb,EAAQ5d,KAAK+7B,WAAWt5B,GACxBi6B,EAAS9e,EAAMue,WAEnB,GAAqB,SAAjBve,EAAM+e,OAIR,OAAOJ,EAAO,OAGhB,GAAI3e,EAAM+e,QAAU38B,KAAKye,KAAM,CAC7B,IAAIme,EAAWnD,EAAOj8B,KAAKogB,EAAO,YAC9Bif,EAAapD,EAAOj8B,KAAKogB,EAAO,cAEpC,GAAIgf,GAAYC,EAAY,CAC1B,GAAI78B,KAAKye,KAAOb,EAAMkf,SACpB,OAAOP,EAAO3e,EAAMkf,UAAU,GACzB,GAAI98B,KAAKye,KAAOb,EAAMmf,WAC3B,OAAOR,EAAO3e,EAAMmf,iBAGjB,GAAIH,GACT,GAAI58B,KAAKye,KAAOb,EAAMkf,SACpB,OAAOP,EAAO3e,EAAMkf,UAAU,OAG3B,CAAA,IAAID,EAMT,MAAM,IAAIG,MAAM,0CALhB,GAAIh9B,KAAKye,KAAOb,EAAMmf,WACpB,OAAOR,EAAO3e,EAAMmf,gBAU9BE,OAAQ,SAASt8B,EAAMuO,GACrB,IAAK,IAAIzM,EAAIzC,KAAK+7B,WAAW37B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAImb,EAAQ5d,KAAK+7B,WAAWt5B,GAC5B,GAAImb,EAAM+e,QAAU38B,KAAKye,MACrBgb,EAAOj8B,KAAKogB,EAAO,eACnB5d,KAAKye,KAAOb,EAAMmf,WAAY,CAChC,IAAIG,EAAetf,EACnB,OAIAsf,IACU,UAATv8B,GACS,aAATA,IACDu8B,EAAaP,QAAUztB,GACvBA,GAAOguB,EAAaH,aAGtBG,EAAe,MAGjB,IAAIR,EAASQ,EAAeA,EAAaf,cAIzC,OAHAO,EAAO/7B,KAAOA,EACd+7B,EAAOxtB,IAAMA,EAETguB,GACFl9B,KAAKqhB,OAAS,OACdrhB,KAAKwQ,KAAO0sB,EAAaH,WAClB1C,GAGFr6B,KAAKm9B,SAAST,IAGvBS,SAAU,SAAST,EAAQU,GACzB,GAAoB,UAAhBV,EAAO/7B,KACT,MAAM+7B,EAAOxtB,IAcf,MAXoB,UAAhBwtB,EAAO/7B,MACS,aAAhB+7B,EAAO/7B,KACTX,KAAKwQ,KAAOksB,EAAOxtB,IACM,WAAhBwtB,EAAO/7B,MAChBX,KAAKo8B,KAAOp8B,KAAKkP,IAAMwtB,EAAOxtB,IAC9BlP,KAAKqhB,OAAS,SACdrhB,KAAKwQ,KAAO,OACa,WAAhBksB,EAAO/7B,MAAqBy8B,IACrCp9B,KAAKwQ,KAAO4sB,GAGP/C,GAGTgD,OAAQ,SAASN,GACf,IAAK,IAAIt6B,EAAIzC,KAAK+7B,WAAW37B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAImb,EAAQ5d,KAAK+7B,WAAWt5B,GAC5B,GAAImb,EAAMmf,aAAeA,EAGvB,OAFA/8B,KAAKm9B,SAASvf,EAAMue,WAAYve,EAAMwf,UACtCpB,EAAcpe,GACPyc,IAKblQ,MAAS,SAASwS,GAChB,IAAK,IAAIl6B,EAAIzC,KAAK+7B,WAAW37B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAImb,EAAQ5d,KAAK+7B,WAAWt5B,GAC5B,GAAImb,EAAM+e,SAAWA,EAAQ,CAC3B,IAAID,EAAS9e,EAAMue,WACnB,GAAoB,UAAhBO,EAAO/7B,KAAkB,CAC3B,IAAI28B,EAASZ,EAAOxtB,IACpB8sB,EAAcpe,GAEhB,OAAO0f,GAMX,MAAM,IAAIN,MAAM,0BAGlBO,cAAe,SAAS3gB,EAAU4gB,EAAYC,GAa5C,OAZAz9B,KAAK87B,UACHhjB,SAAUjH,EAAO+K,GACjB4gB,WAAYA,EACZC,QAASA,GAGS,SAAhBz9B,KAAKqhB,SAGPrhB,KAAKkP,IAAM/P,GAGNk7B,IA/qBX,SAASlO,EAAKkP,EAASC,EAAS9/B,EAAM+/B,GAEpC,IAAImC,EAAiBpC,GAAWA,EAAQv7B,qBAAqB06B,EAAYa,EAAUb,EAC/EkD,EAAYnhC,OAAOgS,OAAOkvB,EAAe39B,WACzC6vB,EAAU,IAAI6L,EAAQF,OAM1B,OAFAoC,EAAU/b,QA8MZ,SAA0ByZ,EAAS7/B,EAAMo0B,GACvC,IAAIgO,EAAQ3D,EAEZ,OAAO,SAAgB5Y,EAAQnS,GAC7B,GAAI0uB,IAAUzD,EACZ,MAAM,IAAI6C,MAAM,gCAGlB,GAAIY,IAAUxD,EAAmB,CAC/B,GAAe,UAAX/Y,EACF,MAAMnS,EAKR,OAAO2uB,IAMT,IAHAjO,EAAQvO,OAASA,EACjBuO,EAAQ1gB,IAAMA,IAED,CACX,IAAI4sB,EAAWlM,EAAQkM,SACvB,GAAIA,EAAU,CACZ,IAAIgC,EAAiBC,EAAoBjC,EAAUlM,GACnD,GAAIkO,EAAgB,CAClB,GAAIA,IAAmBzD,EAAkB,SACzC,OAAOyD,GAIX,GAAuB,SAAnBlO,EAAQvO,OAGVuO,EAAQgM,KAAOhM,EAAQiM,MAAQjM,EAAQ1gB,SAElC,GAAuB,UAAnB0gB,EAAQvO,OAAoB,CACrC,GAAIuc,IAAU3D,EAEZ,MADA2D,EAAQxD,EACFxK,EAAQ1gB,IAGhB0gB,EAAQyM,kBAAkBzM,EAAQ1gB,SAEN,WAAnB0gB,EAAQvO,QACjBuO,EAAQqN,OAAO,SAAUrN,EAAQ1gB,KAGnC0uB,EAAQzD,EAER,IAAIuC,EAASsB,EAAS3C,EAAS7/B,EAAMo0B,GACrC,GAAoB,WAAhB8M,EAAO/7B,KAAmB,CAO5B,GAJAi9B,EAAQhO,EAAQxf,KACZgqB,EACAF,EAEAwC,EAAOxtB,MAAQmrB,EACjB,SAGF,OACEp8B,MAAOy+B,EAAOxtB,IACdkB,KAAMwf,EAAQxf,MAGS,UAAhBssB,EAAO/7B,OAChBi9B,EAAQxD,EAGRxK,EAAQvO,OAAS,QACjBuO,EAAQ1gB,IAAMwtB,EAAOxtB,OAtRP+uB,CAAiB5C,EAAS7/B,EAAMo0B,GAE7C+N,EAcT,SAASK,EAAS3gC,EAAI6gC,EAAKhvB,GACzB,IACE,OAASvO,KAAM,SAAUuO,IAAK7R,EAAGG,KAAK0gC,EAAKhvB,IAC3C,MAAO8a,GACP,OAASrpB,KAAM,QAASuO,IAAK8a,IAiBjC,SAASyQ,KACT,SAASC,KACT,SAASF,KA4BT,SAASU,EAAsBn7B,IAC5B,OAAQ,QAAS,UAAU4Z,QAAQ,SAAS0H,GAC3CthB,EAAUshB,GAAU,SAASnS,GAC3B,OAAOlP,KAAK4hB,QAAQP,EAAQnS,MAoClC,SAASisB,EAAcwC,GACrB,SAAStb,EAAOhB,EAAQnS,EAAK0W,EAASC,GACpC,IAAI6W,EAASsB,EAASL,EAAUtc,GAASsc,EAAWzuB,GACpD,GAAoB,UAAhBwtB,EAAO/7B,KAEJ,CACL,IAAI8E,EAASi3B,EAAOxtB,IAChBjR,EAAQwH,EAAOxH,MACnB,OAAIA,GACiB,iBAAVA,GACPw7B,EAAOj8B,KAAKS,EAAO,WACdwnB,QAAQG,QAAQ3nB,EAAMg9B,SAAS7T,KAAK,SAASnpB,GAClDokB,EAAO,OAAQpkB,EAAO2nB,EAASC,IAC9B,SAASmE,GACV3H,EAAO,QAAS2H,EAAKpE,EAASC,KAI3BJ,QAAQG,QAAQ3nB,GAAOmpB,KAAK,SAAS+W,GAgB1C14B,EAAOxH,MAAQkgC,EACfvY,EAAQngB,IACPogB,GAhCHA,EAAO6W,EAAOxtB,KAwClB,IAAIkvB,EAJ0B,iBAAnBjjC,EAAOyoB,SAAwBzoB,EAAOyoB,QAAQoD,SACvD3E,EAASlnB,EAAOyoB,QAAQoD,OAAO/E,KAAKI,IAmCtCriB,KAAK4hB,QA9BL,SAAiBP,EAAQnS,GACvB,SAASmvB,IACP,OAAO,IAAI5Y,QAAQ,SAASG,EAASC,GACnCxD,EAAOhB,EAAQnS,EAAK0W,EAASC,KAIjC,OAAOuY,EAaLA,EAAkBA,EAAgBhX,KAChCiX,EAGAA,GACEA,KA+GV,SAASN,EAAoBjC,EAAUlM,GACrC,IAAIvO,EAASya,EAAShjB,SAAS8W,EAAQvO,QACvC,GAAIA,IAAWliB,EAAW,CAKxB,GAFAywB,EAAQkM,SAAW,KAEI,UAAnBlM,EAAQvO,OAAoB,CAC9B,GAAIya,EAAShjB,SAASwlB,SAGpB1O,EAAQvO,OAAS,SACjBuO,EAAQ1gB,IAAM/P,EACd4+B,EAAoBjC,EAAUlM,GAEP,UAAnBA,EAAQvO,QAGV,OAAOgZ,EAIXzK,EAAQvO,OAAS,QACjBuO,EAAQ1gB,IAAM,IAAIhT,UAChB,kDAGJ,OAAOm+B,EAGT,IAAIqC,EAASsB,EAAS3c,EAAQya,EAAShjB,SAAU8W,EAAQ1gB,KAEzD,GAAoB,UAAhBwtB,EAAO/7B,KAIT,OAHAivB,EAAQvO,OAAS,QACjBuO,EAAQ1gB,IAAMwtB,EAAOxtB,IACrB0gB,EAAQkM,SAAW,KACZzB,EAGT,IAAIkE,EAAO7B,EAAOxtB,IAElB,OAAMqvB,EAOFA,EAAKnuB,MAGPwf,EAAQkM,EAAS0B,YAAce,EAAKtgC,MAGpC2xB,EAAQpf,KAAOsrB,EAAS2B,QAQD,WAAnB7N,EAAQvO,SACVuO,EAAQvO,OAAS,OACjBuO,EAAQ1gB,IAAM/P,GAUlBywB,EAAQkM,SAAW,KACZzB,GANEkE,GA3BP3O,EAAQvO,OAAS,QACjBuO,EAAQ1gB,IAAM,IAAIhT,UAAU,oCAC5B0zB,EAAQkM,SAAW,KACZzB,GAoDX,SAASmE,EAAaC,GACpB,IAAI7gB,GAAU+e,OAAQ8B,EAAK,IAEvB,KAAKA,IACP7gB,EAAMkf,SAAW2B,EAAK,IAGpB,KAAKA,IACP7gB,EAAMmf,WAAa0B,EAAK,GACxB7gB,EAAMwf,SAAWqB,EAAK,IAGxBz+B,KAAK+7B,WAAW/2B,KAAK4Y,GAGvB,SAASoe,EAAcpe,GACrB,IAAI8e,EAAS9e,EAAMue,eACnBO,EAAO/7B,KAAO,gBACP+7B,EAAOxtB,IACd0O,EAAMue,WAAaO,EAGrB,SAASjB,EAAQF,GAIfv7B,KAAK+7B,aAAgBY,OAAQ,SAC7BpB,EAAY5hB,QAAQ6kB,EAAcx+B,MAClCA,KAAK07B,OAAM,GA8Bb,SAAS7pB,EAAO+K,GACd,GAAIA,EAAU,CACZ,IAAI8hB,EAAiB9hB,EAAS8c,GAC9B,GAAIgF,EACF,OAAOA,EAAelhC,KAAKof,GAG7B,GAA6B,mBAAlBA,EAASpM,KAClB,OAAOoM,EAGT,IAAKxZ,MAAMwZ,EAASxc,QAAS,CAC3B,IAAIqC,GAAK,EAAG+N,EAAO,SAASA,IAC1B,OAAS/N,EAAIma,EAASxc,QACpB,GAAIq5B,EAAOj8B,KAAKof,EAAUna,GAGxB,OAFA+N,EAAKvS,MAAQ2e,EAASna,GACtB+N,EAAKJ,MAAO,EACLI,EAOX,OAHAA,EAAKvS,MAAQkB,EACbqR,EAAKJ,MAAO,EAELI,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,OAASA,KAAMqtB,GAIjB,SAASA,IACP,OAAS5/B,MAAOkB,EAAWiR,MAAM,IApgBpC,CAktBmB,iBAAXjV,EAAsBA,EACX,iBAAXG,OAAsBA,OACb,iBAATE,KAAoBA,KAAOwE,KCxtBpC,IACI,IAAI2+B,GAAK,IAAIrjC,OAAOsjC,YAAY,QAEhC,GADAD,GAAGE,kBACyB,IAAxBF,GAAGG,iBAGH,MAAM,IAAI9B,MAAM,6BAEtB,MAAM3gC,GACN,IAAIuiC,GAAc,SAASra,EAAOwa,GAChC,IAAIC,EAAKC,EAsBT,OArBAF,EAASA,IACPG,SAAS,EACTC,YAAY,EACZC,YAAQjgC,IAGV6/B,EAAMpiC,SAASyiC,YAAY,gBACvBC,gBAAgB/a,EAAOwa,EAAOG,QAASH,EAAOI,WAAYJ,EAAOK,QACrEH,EAAcD,EAAIH,eAClBG,EAAIH,eAAiB,WACnBI,EAAYzhC,KAAKwC,MACjB,IACExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAK8+B,kBAAmB,IAGrBE,GAGTJ,GAAY7+B,UAAYzE,OAAOikC,MAAMx/B,UACrCzE,OAAOsjC,YAAcA,IC1CvB,SAAUzjC,GAOR,IASIqkC,EAT6B,WAC/B,IACE,QAASp5B,OAAO0S,SAChB,MAAM2Q,GACN,OAAO,GAKagW,GAEpBC,EAAiB,SAASC,GAC5B,IAAI7mB,GACFtI,KAAM,WACJ,IAAIvS,EAAQ0hC,EAAMC,QAClB,OAASxvB,UAAgB,IAAVnS,EAAkBA,MAAOA,KAU5C,OANGuhC,IACD1mB,EAAS1S,OAAO0S,UAAY,WAC1B,OAAOA,IAIJA,GAOL+mB,EAAiB,SAAS5hC,GAC5B,OAAO6hC,mBAAmB7hC,GAAO+zB,QAAQ,OAAQ,MAG/C+N,EAAmB,SAAS9hC,GAC9B,OAAO+hC,mBAAmB/hC,GAAO+zB,QAAQ,MAAO,MAyG7C,oBAAqB72B,GAAuD,QAA3C,IAAI8kC,gBAAgB,QAAQ1iC,YAtGrC,WAE3B,IAAI0iC,EAAkB,SAAS1Q,GAG7B,GAFA/yB,OAAOC,eAAeuD,KAAM,YAAc/B,WAEf,iBAAjBsxB,GACR,GAAoB,KAAjBA,EAID,IAFA,IACI2Q,EADArd,GADJ0M,EAAeA,EAAayC,QAAQ,MAAO,KACbzyB,MAAM,KAE5BkD,EAAI,EAAGA,EAAIogB,EAAWziB,OAAQqC,IACpCy9B,EAAYrd,EAAWpgB,GAAGlD,MAAM,KAChCS,KAAKmgC,OACHJ,EAAiBG,EAAU,IAC1BA,EAAU9/B,OAAS,EAAK2/B,EAAiBG,EAAU,IAAM,SAI3D,GAAG3Q,aAAwB0Q,EAAiB,CACjD,IAAIG,EAAQpgC,KACZuvB,EAAa5V,QAAQ,SAAS1b,EAAO2C,GACnCw/B,EAAMD,OAAOliC,EAAO2C,OAKtByQ,EAAQ4uB,EAAgBlgC,UAE5BsR,EAAM8uB,OAAS,SAASv/B,EAAM3C,GACzB2C,KAAQZ,KAAKqgC,SACdrgC,KAAKqgC,SAASz/B,GAAMoE,KAAK/G,EAAMV,YAE/ByC,KAAKqgC,SAASz/B,IAAS3C,EAAMV,aAIjC8T,EAAMmN,OAAS,SAAS5d,UACfZ,KAAKqgC,SAASz/B,IAGvByQ,EAAM3U,IAAM,SAASkE,GACnB,OAAQA,KAAQZ,KAAKqgC,SAAYrgC,KAAKqgC,SAASz/B,GAAM,GAAK,MAG5DyQ,EAAMivB,OAAS,SAAS1/B,GACtB,OAAQA,KAAQZ,KAAKqgC,SAAYrgC,KAAKqgC,SAASz/B,GAAMiD,MAAM,OAG7DwN,EAAM1R,IAAM,SAASiB,GACnB,OAAQA,KAAQZ,KAAKqgC,UAGvBhvB,EAAM3H,IAAM,SAAS9I,EAAM3C,GACzB+B,KAAKqgC,SAASz/B,IAAS3C,EAAMV,aAG/B8T,EAAMsI,QAAU,SAAS4mB,EAAUC,GACjC,IAAI5uB,EACJ,IAAI,IAAIhR,KAAQZ,KAAKqgC,SACnB,GAAGrgC,KAAKqgC,SAASzhC,eAAegC,GAAO,CACrCgR,EAAU5R,KAAKqgC,SAASz/B,GACxB,IAAI,IAAI6B,EAAI,EAAGA,EAAImP,EAAQxR,OAAQqC,IACjC89B,EAAS/iC,KAAKgjC,EAAS5uB,EAAQnP,GAAI7B,EAAMZ,QAMjDqR,EAAMrH,KAAO,WACX,IAAI21B,KAEJ,OADA3/B,KAAK2Z,QAAQ,SAAS1b,EAAO2C,GAAQ++B,EAAM36B,KAAKpE,KACzC8+B,EAAeC,IAGxBtuB,EAAMQ,OAAS,WACb,IAAI8tB,KAEJ,OADA3/B,KAAK2Z,QAAQ,SAAS1b,GAAS0hC,EAAM36B,KAAK/G,KACnCyhC,EAAeC,IAGxBtuB,EAAMO,QAAU,WACd,IAAI+tB,KAEJ,OADA3/B,KAAK2Z,QAAQ,SAAS1b,EAAO2C,GAAQ++B,EAAM36B,MAAMpE,EAAM3C,MAChDyhC,EAAeC,IAGrBH,IACDnuB,EAAMjL,OAAO0S,UAAYzH,EAAMO,SAGjCP,EAAM9T,SAAW,WACf,IAAIgyB,EAAe,GAKnB,OAJAvvB,KAAK2Z,QAAQ,SAAS1b,EAAO2C,GACxB2uB,EAAanvB,OAAS,IAAGmvB,GAAe,KAC3CA,GAAgBsQ,EAAej/B,GAAQ,IAAMi/B,EAAe5hC,KAEvDsxB,GAGTp0B,EAAO8kC,gBAAkBA,EAIzBQ,GAtJJ,MA4JqB,IAAXtlC,EAA0BA,EACV,oBAAXG,OAA0BA,OACjB,oBAATE,KAAwBA,KAAOwE,GAG9C,SAAU7E,GAqKR,GA9J4B,WAC1B,IACE,IAAIulC,EAAI,IAAIC,IAAI,IAAK,YAErB,OADAD,EAAEE,SAAW,QACM,mBAAXF,EAAEG,MAA8BH,EAAEI,aAC1C,MAAMzkC,GACN,OAAO,GAoJP0kC,IA/Ic,WAChB,IAAIC,EAAO7lC,EAAOwlC,IAEdA,EAAM,SAASM,EAAKC,GACJ,iBAARD,IAAkBA,EAAMnhC,OAAOmhC,IAEzC,IAAIE,EAAMvkC,SAASwkC,eAAeC,mBAAmB,IAErD,GADA/lC,OAAO6lC,IAAMA,EACVD,EAAM,CACP,IAAII,EAAcH,EAAIrkC,cAAc,QACpCwkC,EAAYT,KAAOK,EACnBC,EAAIxa,KAAK1Y,YAAYqzB,GAGvB,IAAIC,EAAgBJ,EAAIrkC,cAAc,KAKtC,GAJAykC,EAAcV,KAAOI,EACrBE,EAAIK,KAAKvzB,YAAYszB,GACrBA,EAAcV,KAAOU,EAAcV,KAEL,MAA3BU,EAAcE,WAAqB,IAAI1iB,KAAKwiB,EAAcV,MAC3D,MAAM,IAAI3kC,UAAU,eAGtBM,OAAOC,eAAeuD,KAAM,kBAC1B/B,MAAOsjC,KAIPlwB,EAAQsvB,EAAI5gC,WAcf,OAAQ,OAAQ,WAAY,OAAQ,WAAY,UAChD4Z,QAAQ,SAAS+nB,IAbe,SAASA,GACxCllC,OAAOC,eAAe4U,EAAOqwB,GAC3BhlC,IAAK,WACH,OAAOsD,KAAK2hC,eAAeD,IAE7Bh4B,IAAK,SAASzL,GACZ+B,KAAK2hC,eAAeD,GAAiBzjC,GAEvCG,YAAY,IAMdwjC,CAA2BF,KAG7BllC,OAAO8Q,iBAAiB+D,GAEtB9T,UACEb,IAAK,WACH,IAAI0jC,EAAQpgC,KACZ,OAAO,WACL,OAAOogC,EAAMS,QAKnBA,MACEnkC,IAAK,WACH,OAAOsD,KAAK2hC,eAAed,KAAK7O,QAAQ,MAAM,KAEhDtoB,IAAK,SAASzL,GACZ+B,KAAK2hC,eAAed,KAAO5iC,GAE7BG,YAAY,GAGdwiC,UACElkC,IAAK,WACH,OAAOsD,KAAK2hC,eAAef,SAAS5O,QAAQ,SAAS,MAEvDtoB,IAAK,SAASzL,GACZ+B,KAAK2hC,eAAef,SAAW3iC,GAEjCG,YAAY,GAGdyjC,QACEnlC,IAAK,WAEH,IAAIolC,GAAgBC,QAAS,GAAIC,SAAU,IAAKC,OAAQ,IAAIjiC,KAAK2hC,eAAeF,UAI5ES,EAAkBliC,KAAK2hC,eAAehe,MAAQme,GACnB,KAA7B9hC,KAAK2hC,eAAehe,KAEtB,OAAO3jB,KAAK2hC,eAAeF,SACzB,KACAzhC,KAAK2hC,eAAeQ,UACnBD,EAAmB,IAAMliC,KAAK2hC,eAAehe,KAAQ,KAE1DvlB,YAAY,GAGdgkC,UACE1lC,IAAK,WACH,MAAO,IAETgN,IAAK,SAASzL,KAEdG,YAAY,GAGdikC,UACE3lC,IAAK,WACH,MAAO,IAETgN,IAAK,SAASzL,KAEdG,YAAY,GAGd0iC,cACEpkC,IAAK,WACH,IAAIokC,EAAe,IAAIb,gBAAgBjgC,KAAK6vB,QACxCuQ,EAAQpgC,KAQZ,OAPC,SAAU,SAAU,OAAO2Z,QAAQ,SAAS2oB,GAC3C,IAAIjhB,EAASyf,EAAawB,GAC1BxB,EAAawB,GAAc,WACzBjhB,EAAO7gB,MAAMsgC,EAAcrgC,WAC3B2/B,EAAMvQ,OAASiR,EAAavjC,cAGzBujC,GAET1iC,YAAY,KAIhBuiC,EAAI4B,gBAAkB,SAASC,GAC7B,OAAOxB,EAAKuB,gBAAgB/hC,MAAMwgC,EAAMvgC,YAG1CkgC,EAAI8B,gBAAkB,SAASxB,GAC7B,OAAOD,EAAKyB,gBAAgBjiC,MAAMwgC,EAAMvgC,YAG1CtF,EAAOwlC,IAAMA,EAKb+B,QAGsB,IAApBvnC,EAAOwnC,YAA0B,WAAYxnC,EAAOwnC,UAAW,CACjE,IAAIC,EAAY,WACd,OAAOznC,EAAOwnC,SAASlB,SAAW,KAAOtmC,EAAOwnC,SAASR,UAAYhnC,EAAOwnC,SAAShf,KAAQ,IAAMxoB,EAAOwnC,SAAShf,KAAQ,KAG7H,IACEnnB,OAAOC,eAAetB,EAAOwnC,SAAU,UACrCjmC,IAAKkmC,EACLxkC,YAAY,IAEd,MAAM/B,GACN46B,YAAY,WACV97B,EAAOwnC,SAASd,OAASe,KACxB,OAlLT,MAuLqB,IAAXznC,EAA0BA,EACV,oBAAXG,OAA0BA,OACjB,oBAATE,KAAwBA,KAAOwE,OCzMhC6iC,sBCjJb,IAAeC,EAAAA,EAQR,WAMR,IAAIC,EAAU,aACVC,KACAC,KACAC,KAmDJ,SAASC,EAAQC,EAAUC,GAEzB,GAAKD,EAAL,CAEA,IAAIE,EAAIJ,EAAoBE,GAM5B,GAHAH,EAAkBG,GAAYC,EAGzBC,EAGL,KAAOA,EAAEljC,QACPkjC,EAAE,GAAGF,EAAUC,GACfC,EAAE3iB,OAAO,EAAG,IAUhB,SAAS4iB,EAAiB1hB,EAAM2hB,GAE1B3hB,EAAKrkB,OAAMqkB,GAAQ4hB,QAAS5hB,IAG5B2hB,EAAapjC,QAASyhB,EAAK4H,OAASsZ,GAASS,IAC3C3hB,EAAK4hB,SAAWV,GAASlhB,GASjC,SAAS6hB,EAASC,EAAMC,EAAY/hB,EAAMgiB,GACxC,IAKIC,EACAznC,EANA8kC,EAAMvkC,SACNw+B,EAAQvZ,EAAKuZ,MACb2I,GAAYliB,EAAKmiB,YAAc,GAAK,EACpCC,EAAmBpiB,EAAKqiB,QAAUnB,EAClCoB,EAAeR,EAAK3R,QAAQ,cAAe,IAI/C6R,EAAWA,GAAY,EAEnB,iBAAiB9kB,KAAK4kB,IACxBG,GAAQ,GAGRznC,EAAI8kC,EAAIrkC,cAAc,SACpBsnC,IAAM,aACR/nC,EAAEwkC,KAAOsD,GACA,+BAA+BplB,KAAK4kB,IAE7CtnC,EAAI8kC,EAAIrkC,cAAc,QACpB+F,IAAMshC,IAGR9nC,EAAI8kC,EAAIrkC,cAAc,WACpB+F,IAAM8gC,EACRtnC,EAAE++B,WAAkBj8B,IAAVi8B,GAA6BA,GAGzC/+B,EAAEgoC,OAAShoC,EAAEioC,QAAUjoC,EAAEkoC,aAAe,SAAUC,GAChD,IAAI/+B,EAAS++B,EAAG7jC,KAAK,GAIrB,GAAImjC,GAAS,cAAeznC,EAC1B,IACOA,EAAEooC,MAAMC,QAAQtkC,SAAQqF,EAAS,KACtC,MAAO4kB,GAGP5kB,EAAS,IAKb,GAAc,KAAVA,IAEFo+B,GAAY,GAGGE,EACb,OAAOL,EAASC,EAAMC,EAAY/hB,EAAMgiB,GAK5CD,EAAWD,EAAMl+B,EAAQ++B,EAAG1F,oBAII,IAA9BmF,EAAiBN,EAAMtnC,IAAc8kC,EAAIxa,KAAK1Y,YAAY5R,GA+ChE,SAASsoC,EAAOC,EAAOC,EAAMC,GAC3B,IAAI1B,EACAvhB,EASJ,GANIgjB,GAAQA,EAAKE,OAAM3B,EAAWyB,GAGlChjB,GAAQuhB,EAAW0B,EAAOD,OAGtBzB,EAAU,CACZ,GAAIA,KAAYJ,EACd,KAAM,SAENA,EAAcI,IAAY,GArDhC,SAAmBwB,EAAOhB,EAAY/hB,GAIpC,IAGIxkB,EACAoF,EAJAuiC,GAFJJ,EAAQA,EAAM5/B,KAAO4/B,GAASA,IAEPxkC,OACnBiqB,EAAI2a,EACJ3B,KAqBJ,IAhBAhmC,EAAK,SAASsmC,EAAMl+B,EAAQq5B,GAM1B,GAJc,KAAVr5B,GAAe49B,EAAcr+B,KAAK2+B,GAIxB,KAAVl+B,EAAe,CACjB,IAAIq5B,EACC,OADiBuE,EAAcr+B,KAAK2+B,KAI3CqB,GACiBpB,EAAWP,IAIzB5gC,EAAE,EAAGA,EAAI4nB,EAAG5nB,IAAKihC,EAASkB,EAAMniC,GAAIpF,EAAIwkB,GA+B7CojB,CAAUL,EAAO,SAAUvB,GAEzBE,EAAiB1hB,EAAMwhB,GAGvBF,EAAQC,EAAUC,IACjBxhB,GAiDL,OAxCA8iB,EAAOO,MAAQ,SAAeC,EAAMtjB,GAOlC,OAxOF,SAAmBujB,EAAWxB,GAE5BwB,EAAYA,EAAUpgC,KAAOogC,GAAaA,GAE1C,IAGI/nC,EACA+lC,EACA9kB,EALAklB,KACA/gC,EAAI2iC,EAAUhlC,OACd4kC,EAAaviC,EAejB,IARApF,EAAK,SAAU+lC,EAAUC,GACnBA,EAAcjjC,QAAQojC,EAAax+B,KAAKo+B,KAE5C4B,GACiBpB,EAAWJ,IAIvB/gC,KACL2gC,EAAWgC,EAAU3iC,IAGrB6b,EAAI2kB,EAAkBG,IAEpB/lC,EAAG+lC,EAAU9kB,IAKX4kB,EAAoBE,GAAYF,EAAoBE,QACtDp+B,KAAK3H,GAkMTgoC,CAAUF,EAAM,SAAU3B,GAExBD,EAAiB1hB,EAAM2hB,KAGlBmB,GAQTA,EAAOv0B,KAAO,SAAcgzB,GAC1BD,EAAQC,OAOVuB,EAAOjJ,MAAQ,WACbsH,KACAC,KACAC,MAQFyB,EAAOW,UAAY,SAAmBlC,GACpC,OAAOA,KAAYJ,GAKd2B,GA9RHvpC,EAAAC,QAAiBynC,03BCEfyC,GAAAA,sBACUC,mBACHC,QAAUD,EAAOE,OAAOC,QAAQF,aAChChnC,IAAM+mC,EAAOE,OAAOC,QAAQlnC,2CAuBjCA,OACK8mC,EAAQK,YAAc5lC,KAAKylC,eACrB,SAGL1gC,EAAQzJ,OAAOuqC,aAAaC,QAAQ9lC,KAAKvB,QAE3CsnC,GAAMlpC,GAAGgrB,MAAM9iB,UACR,SAGLihC,EAAO3a,KAAK4a,MAAMlhC,UAEjBghC,GAAMlpC,GAAG+zB,OAAOnyB,IAAQA,EAAI2B,OAAS4lC,EAAKvnC,GAAOunC,8BAGxDxnC,MAEK+mC,EAAQK,WAAc5lC,KAAKylC,SAK3BM,GAAMlpC,GAAG2B,OAAOA,QAKjBmnC,EAAU3lC,KAAKtD,MAGfqpC,GAAMlpC,GAAGgrB,MAAM8d,cAKbO,OAAOP,EAASnnC,UAGfqnC,aAAaM,QAAQnmC,KAAKvB,IAAK4sB,KAAKE,UAAUoa,kDAxD3C,iBAAkBrqC,eACb,gBAOJuqC,aAAaM,QAJP,UAAA,kBAKNN,aAAaO,WALP,YAON,EACT,MAAO/pC,UACE,SAtBbkpC,GCFOc,UACF,gBACE,gBACF,SAGEC,UACF,cACA,SCHLP,eAEE,SACOQ,UACIvmC,KAAKie,eAAesoB,KAAW/pC,eAF1C,SAIO+pC,UACIvmC,KAAKie,eAAesoB,KAAWnT,SAAWA,OAAOhwB,MAAMmjC,WALlE,SAOOA,UACIvmC,KAAKie,eAAesoB,KAAWzmC,gBAR1C,SAUQymC,UACGvmC,KAAKie,eAAesoB,KAAWC,kBAX1C,SAaSD,UACEvmC,KAAKie,eAAesoB,KAAW9qC,gBAd1C,SAgBM8qC,UACMvmC,KAAKymC,gBAAgBF,IAAUx+B,MAAMkH,QAAQs3B,YAjBzD,SAmBQA,UACGvmC,KAAK0mC,WAAWH,EAAOI,mBApBlC,SAsBSJ,UACEvmC,KAAK0mC,WAAWH,EAAOjO,mBAvBlC,SAyBQiO,UACGvmC,KAAK0mC,WAAWH,EAAOK,mBA1BlC,SA4BSL,UACEvmC,KAAKie,eAAesoB,KAAWM,YA7B1C,SA+BMN,UACKvmC,KAAK0mC,WAAWH,EAAOhH,YAhClC,SAkCIgH,UACOvmC,KAAK0mC,WAAWH,EAAOjrC,OAAOwrC,eAAiB9mC,KAAK0mC,WAAWH,EAAOjrC,OAAOyrC,eAnCxF,SAqCMR,UACKvmC,KAAK0mC,WAAWH,EAAOS,aAAgBhnC,KAAKymC,gBAAgBF,IAAUvmC,KAAK4wB,OAAO2V,EAAMn1B,WAtCnG,SAwCIm1B,UACQvmC,KAAKymC,gBAAgBF,IAAU,mFAAmFxnB,KAAKwnB,oBAzCnI,SA2CgBA,UACLA,MAAAA,SA5CX,SA8CMA,UAEEvmC,KAAKymC,gBAAgBF,KACnBvmC,KAAK4wB,OAAO2V,IAAUvmC,KAAKinC,MAAMV,IAAUvmC,KAAKknC,SAASX,MAAYA,EAAMnmC,QAC5EJ,KAAKxB,OAAO+nC,KAAW/pC,OAAOwN,KAAKu8B,GAAOnmC,mBAlDnD,SAqDWmmC,EAAOr8B,UACPs8B,QAAQD,GAASr8B,GAAeq8B,aAAiBr8B,mBAtD5D,SAwDeq8B,UACHvmC,KAAKymC,gBAAgBF,GAA6B,KAApBA,EAAMr8B,yBA3D1C,yBAkE8BtN,SAASuqC,sBAC/B,qBAAsBvqC,SAAS8Q,gBAAgBK,QAAU,OAAOgR,KAAKuH,UAAUE,oBAC/E,kBAAkBzH,KAAKuH,UAAU8gB,gBACpC,uBAAuBroB,KAAKuH,UAAU8gB,kBArE3C,SA2EJnG,OAAKoG,EAAuB5mC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAR,cACf,IAAIglB,QAAQ,SAACG,EAASC,WAEfyhB,EAAU,IAAIC,oBAGd,oBAAqBD,YAInBxiB,iBAAiB,OAAQ,cACR,SAAjBuiB,QAEYhc,KAAK4a,MAAMqB,EAAQE,eAC7B,MAAOnrC,KACGirC,EAAQE,qBAGZF,EAAQG,cAIhB3iB,iBAAiB,QAAS,iBACxB,IAAIkY,MAAMsK,EAAQI,gBAGpBv5B,KAAK,MAAO8yB,GAAK,KAGjBoG,aAAeA,IAEfM,OACV,MAAOtrC,KACEA,iBA5GT,SAoHAwG,OAAK+kC,EAAcnnC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAH,SACf,IAAIglB,QAAQ,SAACG,EAASC,OACnBgiB,EAAQ,IAAIC,MACZjf,EAAU,kBACLgf,EAAMxD,cACNwD,EAAMvD,SACZuD,EAAME,cAAgBH,EAAWhiB,EAAUC,GAAQgiB,WAEjD5nB,OAAO4nB,GAAQxD,OAAQxb,EAASyb,QAASzb,EAAShmB,IAAAA,kBA5HvD,SAiICo+B,UACA,IAAIxb,QAAQ,SAACG,EAASC,MAClBob,WACMrb,QACFC,kBArIT,SA2ICob,EAAKniC,MACPinC,GAAMlpC,GAAG+zB,OAAOqQ,QAKf+G,EAAQjC,GAAMlpC,GAAG+zB,OAAO9xB,GAGxBmpC,EAAS,kBAAMrrC,SAASsrC,iBAAT,IAA8BppC,GAAMsB,YAgBpD4nC,IAAUC,IAAU,KACfE,EAAa5C,GAAQK,UAGrBwC,EAAYxrC,SAASE,cAAc,aACnCurC,aAAaD,GAAW,GAE1BJ,KACUM,aAAa,KAAMxpC,GAI7BqpC,EAAY,KACNI,EAASjtC,OAAOuqC,aAAaC,QAjC5B,SAiC6ChnC,MAC9B,OAAXypC,EAEG,KACJ/sB,EAAO6P,KAAK4a,MAAMsC,iBACX/qC,KAAK4qC,EAAW5sB,EAAKgtB,aAOrCC,MAAMxH,GACN7Z,KAAK,SAAA3hB,GACEsgC,GAAMlpC,GAAGgrB,MAAMpiB,KAIf0iC,UACOtC,aAAaM,QApDrB,SAqDcrnC,EACTusB,KAAKE,mBACQ9lB,OAKRjI,KAAK4qC,EAAW3iC,MAEhC0kB,MAAM,wBAxDNue,EAAaltB,GAEdwsB,GAASC,WAKRU,UAAYntB,WAGRgmB,KAAKoH,aAAa5oC,KAAMpD,SAAS4kC,KAAKqH,WAAW,kBAhKxD,SAmNCC,UACGA,EAAV,IAAoBvtC,KAAK2H,MAAsB,IAAhB3H,KAAKyD,gBApN9B,SAwNL+pC,EAAU/tB,OAELguB,EAAUD,EAAS3oC,OAAS2oC,GAAYA,SAIxCj2B,KAAKk2B,GACNv/B,UACAkQ,QAAQ,SAACsvB,EAAS1kC,OACT2kC,EAAQ3kC,EAAQ,EAAIyW,EAAQmuB,WAAU,GAAQnuB,EAG9C+L,EAASkiB,EAAQG,WACjBC,EAAUJ,EAAQK,cAIlBr7B,YAAYg7B,GAKdI,IACOT,aAAaM,EAAOG,KAEpBp7B,YAAYi7B,oBAjPzB,SAuPIvoC,EAAMkiB,EAAY0mB,OAEtBN,EAAUrsC,SAASE,cAAc6D,UAGnColC,GAAMlpC,GAAG2B,OAAOqkB,OACV2mB,cAAcP,EAASpmB,GAI7BkjB,GAAMlpC,GAAG+zB,OAAO2Y,OACRE,UAAYF,GAIjBN,eAtQD,SA0QEA,EAASxnC,KACV2nC,WAAWR,aAAaK,EAASxnC,EAAO6nC,4BA3QzC,SA+QI3oC,EAAMomB,EAAQlE,EAAY0mB,KAE7Bt7B,YAAY83B,GAAMjpC,cAAc6D,EAAMkiB,EAAY0mB,mBAjRnD,SAqRIN,GACNlD,GAAMlpC,GAAGqqC,SAAS+B,IAAYlD,GAAMlpC,GAAGoqC,MAAMgC,SACvCn2B,KAAKm2B,GAAStvB,QAAQosB,GAAM2D,eAIjC3D,GAAMlpC,GAAGosC,QAAQA,IAAalD,GAAMlpC,GAAGosC,QAAQA,EAAQG,eAIpDA,WAAWlkB,YAAY+jB,iBA/RzB,SAmSGA,WACH7oC,EAAW6oC,EAAQJ,WAAnBzoC,OAECA,EAAS,KACJ8kB,YAAY+jB,EAAQU,cAClB,kBAxSR,SA6SKC,EAAUC,UAChB9D,GAAMlpC,GAAGosC,QAAQY,IAAc9D,GAAMlpC,GAAGosC,QAAQY,EAAST,aAAgBrD,GAAMlpC,GAAGosC,QAAQW,MAItFR,WAAWU,aAAaF,EAAUC,GAEpCD,GALI,oBA/SL,SAwTIX,EAASpmB,GACdkjB,GAAMlpC,GAAGosC,QAAQA,KAAYlD,GAAMlpC,GAAGgrB,MAAMhF,WAI1CjR,QAAQiR,GAAYlJ,QAAQ,SAAAowB,iBAC/BtrC,EAEEurC,EAAA,GADF/rC,EACE+rC,EAAA,KACM1B,aAAa7pC,EAAKR,gCAjUxB,SAsUgBgsC,EAAKC,OAMtBnE,GAAMlpC,GAAG+zB,OAAOqZ,IAAQlE,GAAMlpC,GAAGgrB,MAAMoiB,gBAItCpnB,KACAsnB,EAAWD,WAEb3qC,MAAM,KAAKoa,QAAQ,SAAAvR,OAEbgiC,EAAWhiC,EAAE28B,OACbsF,EAAYD,EAASpY,QAAQ,IAAK,IAIlCsY,EAHWF,EAASpY,QAAQ,SAAU,IAGrBzyB,MAAM,KACvBd,EAAM6rC,EAAM,GACZrsC,EAAQqsC,EAAMlqC,OAAS,EAAIkqC,EAAM,GAAGtY,QAAQ,QAAS,IAAM,UAGnDoY,EAASrf,OAAO,QAGrB,IAEGgb,GAAMlpC,GAAG2B,OAAO2rC,IAAapE,GAAMlpC,GAAG+zB,OAAOuZ,EAASI,WAC7CA,OAAT,IAAsBF,KAGfE,MAAQF,YAGlB,MAEUvrC,GAAKsrC,EAASpY,QAAQ,IAAK,cAGrC,MAEUvzB,GAAOR,KASvB4kB,gBA3XD,SA+XGomB,EAASuB,MACbzE,GAAMlpC,GAAGosC,QAAQA,QAIlBrpC,EAAO4qC,EAENzE,GAAMlpC,GAAG4tC,QAAQ7qC,QACVqpC,EAAQyB,aAAa,WAG7B9qC,IACQ0oC,aAAa,SAAU,MAEvBqC,gBAAgB,wBA7YtB,SAkZE1B,EAASoB,EAAWO,MACxB7E,GAAMlpC,GAAGosC,QAAQA,GAAU,KACvB5nB,EAAS,qBACQ,IAAVupB,MACEA,EAAQ,MAAQ,YAGrBC,UAAUxpB,GAAQgpB,GACnBpB,EAAQ4B,UAAUC,SAAST,UAG/B,eA7ZD,SAiaDpB,EAASoB,UACPtE,GAAMlpC,GAAGosC,QAAQA,IAAYA,EAAQ4B,UAAUC,SAAST,YAlazD,SAsaFpB,EAASmB,OACPrqC,GAAc6mC,QAAAA,aAMdmE,EAAUhrC,EAAUgrC,SAAWhrC,EAAUirC,uBAAyBjrC,EAAUkrC,oBAAsBlrC,EAAUmrC,qCAHvGnjC,MAAM+K,KAAKlW,SAASsrC,iBAAiBkC,IAAWtwB,SAAS9Z,cAK7D+qC,EAAQvtC,KAAKyrC,EAASmB,gBA/avB,SAmbEA,UACDpqC,KAAK+oC,SAASX,UAAUF,iBAAiBkC,eApb1C,SAwbCA,UACApqC,KAAK+oC,SAASX,UAAU+C,cAAcf,oBAzbvC,eA8bFgB,EAAUxuC,SAASyuC,uBAElBD,GAAWA,IAAYxuC,SAAS4kC,KAGvB5kC,SAASuuC,cAAc,UAFvB,gBAjcR,eA0cAlC,EAAgCxoC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAtB,KAAM4mB,EAAgB5mB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,MACjCslC,GAAMlpC,GAAGosC,QAAQA,QAIhBqC,EAAYvF,GAAMwF,YAAY/tC,KAAKwC,KAAM,2DACzCoM,EAAQk/B,EAAU,GAClB1kB,EAAO0kB,EAAUA,EAAUlrC,OAAS,GAEpCorC,EAAO,SAAAjnB,MAES,QAAdA,EAAM9lB,KAAmC,IAAlB8lB,EAAMknB,aAK3BL,EAAUrF,GAAM2F,kBAElBN,IAAYxkB,GAASrC,EAAMonB,SAIpBP,IAAYh/B,GAASmY,EAAMonB,aAE7BC,UACC/M,qBALA+M,UACA/M,oBAQVxX,KACMwkB,GAAG7rC,KAAK+oC,SAASX,UAAW,UAAWoD,GAAM,MAE7CM,IAAI9rC,KAAK+oC,SAASX,UAAW,UAAWoD,GAAM,oBA1elD,SA+eKzC,EAAUxkB,EAAOgc,OAAUlZ,EAAiD5mB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAAjCsrC,IAAiCtrC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAAjBurC,EAAiBvrC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,OAEnFslC,GAAMlpC,GAAGgrB,MAAMkhB,KAAahD,GAAMlpC,GAAGgrB,MAAMtD,IAAWwhB,GAAMlpC,GAAGovC,SAAS1L,MAKxEwF,GAAMlpC,GAAGqqC,SAAS6B,IAAahD,GAAMlpC,GAAGoqC,MAAM8B,SAExCj2B,KAAKi2B,GAAUpvB,QAAQ,SAAAsvB,GACrBA,aAAmBiD,SACbC,eAAe3uC,KAAK,KAAMyrC,EAAS1kB,EAAOgc,EAAUlZ,EAAQ0kB,EAASC,cAQjFI,EAAS7nB,EAAMhlB,MAAM,KAIvB8sC,EAAUL,EAGVM,GAAQC,8CAUL5yB,QAAQ,SAAAhZ,KACF0mB,EAAS,mBAAqB,uBAAuB1mB,EAAM4/B,EAAU8L,UAphB5E,SAyhBPpD,OAASmD,EAAwD3rC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA/C,GAAI8/B,EAA2C9/B,UAAA,GAAjCsrC,IAAiCtrC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAAjBurC,EAAiBvrC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,MAC1D0rC,eAAelD,EAASmD,EAAQ7L,GAAU,EAAMwL,EAASC,QA1hBzD,SA8hBN/C,OAASmD,EAAwD3rC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA/C,GAAI8/B,EAA2C9/B,UAAA,GAAjCsrC,IAAiCtrC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAAjBurC,EAAiBvrC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,MAC3D0rC,eAAelD,EAASmD,EAAQ7L,GAAU,EAAOwL,EAASC,kBA/hB1D,SAmiBI/C,OAAStoC,EAAyCF,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAlC,GAAIy+B,EAA8Bz+B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAAb2+B,EAAa3+B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,SAEvDslC,GAAMlpC,GAAGosC,QAAQA,KAAYlD,GAAMlpC,GAAGgrB,MAAMlnB,QAK3C4jB,EAAQ,IAAIqa,YAAYj+B,oBAElBnE,OAAOyjB,UAAWmf,QAChBp/B,WAKNwsC,cAAcjoB,iBAljBhB,SAujBE0kB,EAAS1C,MAEbR,GAAMlpC,GAAGoqC,MAAMgC,IAAYlD,GAAMlpC,GAAGqqC,SAAS+B,SACvCn2B,KAAKm2B,GAAStvB,QAAQ,SAAAlY,UAAUskC,GAAM0G,YAAYhrC,EAAQ8kC,aAK/DR,GAAMlpC,GAAGosC,QAAQA,QAKhByD,EAAmD,SAAzCzD,EAAQ0D,aAAa,gBAC/B/O,EAAQmI,GAAMlpC,GAAG4tC,QAAQlE,GAASA,GAASmG,IAGzCpE,aAAa,eAAgB1K,YAxkB/B,SA4kBH2I,8BAAU1kB,EAAM9Z,MAAA6kC,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,MAAAA,EAAA,GAAApsC,UAAAosC,UACf9G,GAAMlpC,GAAGgrB,MAAM0e,GACRA,EAGJA,EAAMhpC,WAAWy0B,QAAQ,WAAY,SAAC7D,EAAO1rB,UAAOsjC,GAAMlpC,GAAG+zB,OAAO/O,EAAKpf,IAAMof,EAAKpf,GAAK,oBAjlB1F,SAqlBIqqC,EAASzoC,UACH,IAAZyoC,GAAyB,IAARzoC,GAAa+uB,OAAOhwB,MAAM0pC,IAAY1Z,OAAOhwB,MAAMiB,GAC7D,GAGHyoC,EAAUzoC,EAAM,KAAK0oC,QAAQ,aA1lB/B,SA8lBD9uC,UACE+uC,SAAU/uC,EAAQ,GAAK,GAAM,GAAI,gBA/lBlC,SAimBCA,UACA+uC,SAAU/uC,EAAQ,GAAM,GAAI,gBAlmB7B,SAomBCA,UACA+uC,SAAS/uC,EAAQ,GAAI,gBArmBtB,eAymBC84B,EAAkDt2B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA3C,EAAGwsC,EAAwCxsC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAAlBysC,EAAkBzsC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,OAEpDslC,GAAMlpC,GAAG4G,OAAOszB,UACV/2B,KAAKmtC,WAAW,KAAMF,EAAcC,OAIzCE,EAAS,SAAAnvC,UAAS,IAAIA,GAAQ4F,OAAO,IAGvCwpC,EAAQrtC,KAAKstC,SAASvW,GACpBwW,EAAOvtC,KAAKwtC,WAAWzW,GACvB0W,EAAOztC,KAAK0tC,WAAW3W,UAGzBkW,GAAgBI,EAAQ,KACxB,MAEQ,IAIFH,EAAW,IAAM,IAAKG,EAAQD,EAAOG,GAA/C,IAAwDH,EAAOK,eA/nBzD,eAmoBClH,EAAqC9lC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA7B,GAAI+Y,EAAyB/Y,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAlB,GAAIuxB,EAAcvxB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,UACjC8lC,EAAMvU,QAAQ,IAAI9B,OAAO1W,EAAKjc,WAAWy0B,QAAQ,4BAA6B,QAAS,KAAMA,EAAQz0B,yBApoBtG,kBAwoBckD,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,IACHlD,WAAWy0B,QAAQ,SAAU,SAAAuX,UAAQA,EAAKxe,OAAO,GAAG4iB,cAAgBpE,EAAKqE,OAAO,GAAGC,8BAzoB1F,eA8oBFjd,GADiBnwB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,IACElD,oBAGVwoC,GAAM+H,WAAWld,EAAQ,IAAK,OAG9BmV,GAAM+H,WAAWld,EAAQ,IAAK,OAG9BmV,GAAMgI,YAAYnd,GAGpBmV,GAAM+H,WAAWld,EAAQ,IAAK,iBA1pB/B,eA+pBFA,GADgBnwB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,IACGlD,oBAGVwoC,GAAMiI,aAAapd,IAGd7F,OAAO,GAAG8iB,cAAgBjd,EAAO/sB,MAAM,WArqB/C,mBAyqBHpC,EAAyBhB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,yBAATwtC,EAASlmC,MAAAmmC,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,MAAAA,EAAA,GAAA1tC,UAAA0tC,OACvBF,EAAQ7tC,cACFqB,MAGLZ,EAASotC,EAAQrO,eAElBmG,GAAMlpC,GAAG2B,OAAOqC,WAIdmJ,KAAKnJ,GAAQ8Y,QAAQ,SAAAlb,GACpBsnC,GAAMlpC,GAAG2B,OAAOqC,EAAOpC,KAClBjC,OAAOwN,KAAKvI,GAAQqY,SAASrb,WACvBwhB,OAAOxe,EAAd2sC,MAAyB3vC,UAGvBynC,OAAOzkC,EAAOhD,GAAMoC,EAAOpC,YAE1BwhB,OAAOxe,EAAd2sC,MAAyB3vC,EAAMoC,EAAOpC,OAIvCsnC,GAAMG,OAAN1lC,MAAAulC,IAAatkC,GAAbvC,6HAAAmvC,CAAwBJ,MAfpBxsC,UAjrBL,SAosBHwlC,UACElB,GAAMlpC,GAAGoqC,MAAMA,GAIbA,EAAM1tB,OAAO,SAAC+0B,EAAM/pC,UAAU0iC,EAAMrtB,QAAQ00B,KAAU/pC,IAHlD0iC,aAtsBL,SA6sBAzoC,UACC6sB,KAAK4a,MAAM5a,KAAKE,UAAU/sB,aA9sB3B,SAktBFyoC,EAAOhpC,UACN8nC,GAAMlpC,GAAGoqC,MAAMA,IAAWA,EAAM7mC,OAI9B6mC,EAAM9vB,OAAO,SAACsH,EAAM8vB,UAAUhzC,KAAK2L,IAAIqnC,EAAOtwC,GAAS1C,KAAK2L,IAAIuX,EAAOxgB,GAASswC,EAAO9vB,IAHnF,uBAptBL,SA2tBOwiB,SAET,wDAAwDliB,KAAKkiB,GACtDoF,GAAUmI,QAIjB,wDAAwDzvB,KAAKkiB,GACtDoF,GAAUoI,MAGd,qBAtuBD,SA0uBKxN,MACP8E,GAAMlpC,GAAGgrB,MAAMoZ,UACR,YAIJA,EAAI9S,MADG,gEACY+B,OAAOwe,GAAKzN,gBAhvBhC,SAovBGA,MACL8E,GAAMlpC,GAAGgrB,MAAMoZ,UACR,QAGP8E,GAAMlpC,GAAG4G,OAAO2vB,OAAO6N,WAChBA,SAIJA,EAAI9S,MADG,mCACY+B,OAAOwe,GAAKzN,YA9vBhC,SAkwBDA,OACC0N,EAAS/xC,SAASE,cAAc,cAC/B+jC,KAAOI,EACP0N,gBArwBD,SAywBGpI,OACL1W,EAAS0W,GAGTA,EAAM5W,WAAW,YAAc4W,EAAM5W,WAAW,iBAClC3vB,KAAK4uC,SAASrI,GAAzB1W,eAGH7vB,KAAKnD,GAAGgrB,MAAMgI,GACP,KAGIA,EAAOhsB,MAAMgsB,EAAOjW,QAAQ,KAAO,GAAGra,MAAM,KAE7C4X,OAAO,SAAC4nB,EAAQ8P,SAItBA,EAAKtvC,MAAM,eAFXd,EAF+BqwC,EAAA,GAG/BxxC,EAH+BwxC,EAAA,UAM5BtyC,OAAOyjB,OAAO8e,EAAdqP,MAAyB3vC,EAAMuhC,mBAAmB1iC,0BA7xBvD,SAkyBKipC,UACNR,GAAMlpC,GAAG2B,OAAO+nC,GAId/pC,OAAOwN,KAAKu8B,GACdvsB,IAAI,SAAAvb,UAAUqhC,mBAAmBrhC,GAA7B,IAAqCqhC,mBAAmByG,EAAM9nC,MAClEoB,KAAK,KALC,cApyBL,SA6yBAgB,OACAkuC,EAAWnyC,SAASoyC,yBACpB/F,EAAUrsC,SAASE,cAAc,gBAC9BmR,YAAYg7B,KACbN,UAAY9nC,EACbkuC,EAASE,WAAWxF,0BAlzBrB,SAszBKyF,EAAOC,OAEZC,EADW,SAAXC,EAAYlyB,EAAGmyB,UAAa,IAANA,EAAUnyB,EAAIkyB,EAASC,EAAGnyB,EAAImyB,GAC5CD,CAASH,EAAOC,UACpBD,EAAQE,EAAlB,IAA2BD,EAASC,gCAK9BnG,EAAUrsC,SAASE,cAAc,QAEjCsvC,oBACgB,oCACH,4BACF,2CACD,iBAGVzrC,EAAOnE,OAAOwN,KAAKoiC,GAAQ5yB,KAAK,SAAA+K,eAAkCplB,IAAzB8pC,EAAQl7B,MAAMwW,aAEtDwhB,GAAMlpC,GAAG+zB,OAAOjwB,IAAQyrC,EAAOzrC,YAz0BhC,SA60BFsoC,cACO,cACDZ,aAAaY,GAAS,KACpBsG,gBACFlH,aAAaY,GAAS,IAC7B,KJp1BLqD,UAEK,gBAAiB1vC,SAASE,cAAc,eACxC,gBAAiBF,SAASE,cAAc,eAHnC,SAON6D,EAAM6uC,EAAUC,OACdC,GAAM,EACNC,GAAK,EACHC,EAAU7J,GAAM8J,aAChBC,EAAgBF,EAAQG,UAAYN,GAAenD,GAAQmD,mBAEtDD,EAAX,IAAuB7uC,OACd,mBACK2rC,GAAQ0D,QACF1D,GAAQ2D,cAAgBL,EAAQG,UAAYD,aAGvD,mBACKxD,GAAQ4D,QACF5D,GAAQ2D,qBAGnB,oBACA,iBACK,IACD3D,GAAQ2D,cAAgBL,EAAQG,UAAYD,sBAI3CxD,GAAQ4D,OAAS5D,GAAQ0D,QACnB1D,GAAQ2D,oCAYZlK,GAAM8J,aACNE,UAAYhK,GAAMlpC,GAAGovC,SAASlG,GAAMjpC,cAAc,SAASqzC,mCAKtEpK,GAAMlpC,GAAGovC,SAAS3wC,OAAO80C,mDAIrB,gBAAiBxzC,SAASE,cAAc,cAtDzC,SA2DP6D,OACO0vC,EAAUrwC,KAAVqwC,cAICrwC,KAAKswC,UAAYvK,GAAMlpC,GAAGovC,SAASoE,EAAME,oBACnC,KAIP5vC,EAAKmZ,SAAS,kBACPu2B,EAAME,YAAY5vC,GAAMqxB,QAAQ,KAAM,OAI7ChyB,KAAKwwC,eACG7vC,OACC,oBACM0vC,EAAME,YAAY,oCAAoCve,QAAQ,KAAM,QAE1E,mBACMqe,EAAME,YAAY,8CAA8Cve,QAAQ,KAAM,QAEpF,mBACMqe,EAAME,YAAY,8BAA8Bve,QAAQ,KAAM,mBAG9D,OAEZ,GAAIhyB,KAAKywC,eACJ9vC,OACC,oBACM0vC,EAAME,YAAY,eAAeve,QAAQ,KAAM,QAErD,mBACMqe,EAAME,YAAY,8BAA8Bve,QAAQ,KAAM,QAEpE,mBACMqe,EAAME,YAAY,yBAAyBve,QAAQ,KAAM,mBAGzD,GAGrB,MAAO31B,UACE,SAIJ,cAIC,eAAgBO,SAASE,cAAc,0BAKhC,eAEX8oC,GAAY,UAENyG,EAAU7vC,OAAOC,kBAAmB,eAAW,qBAEjC,EACL,eAGRqoB,iBAAiB,OAAQ,KAAMunB,UAC/BqE,oBAAoB,OAAQ,KAAMrE,GAC3C,MAAOhwC,WAIFupC,EAhBQ,eAqBT/C,GAAQjmC,SAASE,cAAc,YAC/B6D,KAAO,QACS,UAAfkiC,GAAMliC,YAKV,iBAAkB/D,SAAS8Q,6BAGQ,IAA7Bq4B,GAAM4K,iCAIJ,eAAgBr1C,QAAUA,OAAOs1C,WAAW,4BAA4B7F,SKxJrF8F,eAAQ,kBAED7wC,KAAKswC,QAIHtwC,KAAKqwC,MAAMnI,iBAAiB,UAHxB,wBAHL,eAWDloC,KAAKswC,eACC,SAILrC,EAAU4C,GAAMC,WAAWtzC,KAAKwC,SAElC+lC,GAAMlpC,GAAGgrB,MAAMomB,UACR,SAIL8C,EAAQhpC,MAAM+K,KAAKm7B,GAAS10B,OAAO,SAAA1Y,UAAWklC,GAAMlpC,GAAGgrB,MAAMhnB,EAAO8rC,aAAa,kBAGnF5G,GAAMlpC,GAAGgrB,MAAMkpB,GACR,KAIJhL,GAAMiL,OAAOD,EAAM/2B,IAAI,SAAAnZ,UAAUuyB,OAAOvyB,EAAO8rC,aAAa,oBA/B7D,cAmCD3sC,KAAKswC,aAIJ9K,EAASxlC,YAGRvD,eAAe+oC,EAAO6K,MAAO,eAAW,eAGjCpC,EAAU4C,GAAMC,WAAWtzC,KAAKgoC,MAElCO,GAAMlpC,GAAGgrB,MAAMomB,UACR,SAGLlD,EAAUhjC,MAAM+K,KAAKm7B,GAAS10B,OAAO,SAAA1Y,UAAUA,EAAO8rC,aAAa,SAAWnH,EAAO3kC,gBAEvFklC,GAAMlpC,GAAGgrB,MAAMkjB,GACR,KAGJ3X,OAAO2X,EAAQ,GAAG4B,aAAa,cAfC,SAiBvCpG,OAEM0H,EAAU4C,GAAMC,WAAWtzC,KAAKgoC,OAElCO,GAAMlpC,GAAGgrB,MAAMomB,QAKblD,EAAUhjC,MAAM+K,KAAKm7B,GAAS10B,OAAO,SAAA1Y,UAAUuyB,OAAOvyB,EAAO8rC,aAAa,WAAapG,QAGzFR,GAAMlpC,GAAGgrB,MAAMkjB,QAKbnF,EAAYmF,EAAQxxB,OAAO,SAAA1Y,UAAUyrC,GAAQ2E,KAAKzzC,KAAKgoC,EAAQ3kC,EAAO8rC,aAAa,eAGrF5G,GAAMlpC,GAAGgrB,MAAM+d,OAKb4G,cAAchvC,KAAKgoC,EAAQA,EAAO6K,MAAO,oBAAoB,WACtD9J,QAIL2K,EAAyB1L,EAAzB0L,YAAaC,EAAY3L,EAAZ2L,UAGdd,MAAMxtC,IAAM+iC,EAAU,GAAG+G,aAAa,SAGtC0D,MAAMe,OAGTD,KACOE,SAIJH,YAAcA,KAGf1E,cAAchvC,KAAKgoC,EAAQA,EAAO6K,MAAO,iBAAiB,WACnD9J,2BA3Gf,WAoHDvmC,KAAKswC,aAKJ5G,cAAcmH,GAAMC,mBAKrBT,MAAM/H,aAAa,MAAOtoC,KAAK0lC,OAAO4L,iBAKtCjB,MAAMe,YAGNG,MAAMnqC,IAAI,iCCvIjBoqC,GAAO,eACL/yC,EAAuBgC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAjB,GAAIilC,EAAajlC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,SACnBslC,GAAMlpC,GAAGgrB,MAAMppB,IAAQsnC,GAAMlpC,GAAGgrB,MAAM6d,KAAYlpC,OAAOwN,KAAK07B,EAAO8L,MAAM13B,SAASrb,SAC7E,OAGPmyB,EAAS8U,EAAO8L,KAAK/yC,GAEnBuzB,gBACY0T,EAAO+L,mBACV/L,EAAOgM,qBAGf9/B,QAAQogB,GAASrY,QAAQ,SAAAowB,iBAC5BtrC,EAEEurC,EAAA,GADF/rC,EACE+rC,EAAA,KACOjE,GAAM+H,WAAWld,EAAQnyB,EAAKR,KAGpC2yB,GCfTgf,GAAU7J,GAAM8J,aAEhB8B,eAAW,eAMHC,EADM,IAAIjR,IAAI3gC,KAAK0lC,OAAOmM,QAASv2C,OAAOqnC,UAC/BmP,OAASx2C,OAAOqnC,SAASmP,MAASlC,GAAQmC,OAASz2C,OAAO02C,yBAGlEhyC,KAAK0lC,OAAOmM,8BATZ,2BAkBA9I,SAAS4I,SAAW5L,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUP,SAAS32B,cAG/E+tB,SAASoJ,cACJpM,GAAMwF,YAAY/tC,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQd,YAC1DtL,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQC,eACxDrM,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQE,gBAC3DtM,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQG,oBACrDvM,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQI,kBACjExM,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQK,UAC3DzM,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQM,aACtD1M,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQO,kBACzD3M,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQQ,mBAC1D5M,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQS,qBACxD7M,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUC,QAAQU,kBAIrE9J,SAAS+J,SAAW/M,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUY,eAGtE/J,SAASgK,aACJhN,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUa,OAAOC,aACvDjN,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUa,OAAOE,cAIhElK,SAAS/6B,gBACF+3B,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUlkC,QAAQlG,oBACrDi+B,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUlkC,QAAQkjC,sBAC7DnL,GAAMkM,WAAWz0C,KAAKwC,KAAMA,KAAK0lC,OAAOwM,UAAUlkC,QAAQklC,WAIpEnN,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS+J,iBAC1B/J,SAAS/6B,QAAQmlC,YAAcnzC,KAAK+oC,SAAS+J,SAAS3H,cAAvB,IAAyCnrC,KAAK0lC,OAAO0N,WAAWC,WAGjG,EACT,MAAO5pB,eAEA8nB,MAAM+B,KAAK,kEAAmE7pB,QAG9E8pB,sBAAqB,IAEnB,eAhEF,SAqEF5yC,EAAMkiB,OAEPgvB,EAAUF,GAAS6B,WAAWh2C,KAAKwC,MACnCyzC,GAAe5B,EAAQD,KAAqB,GAAdC,EAAQ5Q,KAAtC,IAAkDjhC,KAAK0lC,OAAOgO,WAG9DC,EAAO/2C,SAASg3C,gBALJ,6BAK+B,UAC3CpK,cACFmK,EACA5N,GAAMG,OAAOrjB,QACH,yBACK,eAKbgxB,EAAMj3C,SAASg3C,gBAfH,6BAe8B,OAC1CjQ,EAAU8P,EAAV,IAAsB9yC,QAKxB,SAAUkzC,IACNC,eAAe,+BAAgC,OAAQnQ,KAEvDmQ,eAAe,+BAAgC,aAAcnQ,KAIhE11B,YAAY4lC,GAEVF,eApGE,SAwGDhzC,EAAMozC,OACVxK,EAAOiI,GAAS7wC,EAAMX,KAAK0lC,QACzB7iB,EAAarmB,OAAOyjB,UAAW8zB,UAE7BpzC,OACC,QACM,gBAGN,YACM,gBAOX,UAAWkiB,IACA0nB,OAAX,IAAwBvqC,KAAK0lC,OAAO0N,WAAW5I,SAEpCD,MAAQvqC,KAAK0lC,OAAO0N,WAAW5I,OAGvCzE,GAAMjpC,cAAc,OAAQ+lB,EAAY0mB,gBA/HtC,SAmIDA,MACJxD,GAAMlpC,GAAGgrB,MAAM0hB,UACR,SAGLyK,EAAQjO,GAAMjpC,cAAc,cACvBkD,KAAK0lC,OAAO0N,WAAWa,KAAKh2C,iBAGjCgQ,YACF83B,GAAMjpC,cACF,cAEWkD,KAAK0lC,OAAO0N,WAAWa,KAAKD,OAEvCzK,IAIDyK,gBAtJE,SA0JAE,EAAYH,OACfI,EAASpO,GAAMjpC,cAAc,UAC7B+lB,EAAarmB,OAAOyjB,UAAW8zB,GACjCpzC,EAAOolC,GAAMqO,YAAYF,GAEzB7sB,GAAS,EACTgtB,OAAAA,EACAV,OAAAA,EACAW,OAAAA,EACAC,OAAAA,SAEE,SAAU1xB,MACDliB,KAAO,UAGlB,UAAWkiB,EACPA,EAAW0nB,MAAMzwB,SAAS9Z,KAAK0lC,OAAO0N,WAAWoB,aACtCjK,OAAX,IAAwBvqC,KAAK0lC,OAAO0N,WAAWoB,WAGxCjK,MAAQvqC,KAAK0lC,OAAO0N,WAAWoB,QAItCN,OACC,UACQ,IACD,SACO,UACR,SACO,kBAGb,UACQ,IACD,SACO,WACR,WACO,kBAGb,cACQ,IACD,mBACO,oBACR,iBACO,wBAGb,gBACQ,IACD,oBACO,mBACR,qBACO,4BAGb,eACU3J,OAAX,IAAwBvqC,KAAK0lC,OAAO0N,WAAWoB,QAA/C,eACO,SACC,SACD,uBAIC7zC,IACDuzC,SAIX7sB,KAEOpZ,YAAY0jC,GAAS8C,WAAWj3C,KAAKwC,KAAMu0C,GAAehK,MAAO,qBACjEt8B,YAAY0jC,GAAS8C,WAAWj3C,KAAKwC,KAAM2zC,GAAQpJ,MAAO,yBAG1Dt8B,YAAY0jC,GAAS+C,YAAYl3C,KAAKwC,KAAMs0C,GAAgB/J,MAAO,sBACnEt8B,YAAY0jC,GAAS+C,YAAYl3C,KAAKwC,KAAMq0C,GAAS9J,MAAO,0BAGxD,iBAAkB,MAEtBt8B,YAAY0jC,GAAS8C,WAAWj3C,KAAKwC,KAAM2zC,MAC3C1lC,YAAY0jC,GAAS+C,YAAYl3C,KAAKwC,KAAMq0C,QAIjDnO,OAAOrjB,EAAYkjB,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUC,QAAQxxC,GAAOkiB,OAExF2mB,cAAc2K,EAAQtxB,GAGf,SAATliB,GACKolC,GAAMlpC,GAAGoqC,MAAMjnC,KAAK+oC,SAASoJ,QAAQxxC,WACjCooC,SAASoJ,QAAQxxC,YAGrBooC,SAASoJ,QAAQxxC,GAAMqE,KAAKmvC,SAE5BpL,SAASoJ,QAAQxxC,GAAQwzC,EAG3BA,eAhQE,SAoQDxzC,EAAMkiB,OAERwxB,EAAQtO,GAAMjpC,cAChB,aAES+lB,EAAW/jB,MACT+jB,EAAW/jB,GAAlB,eACOkB,KAAK0lC,OAAO0N,WAAW5I,QAElCgH,GAAS7wC,EAAMX,KAAK0lC,SAIlBa,EAAQR,GAAMjpC,cAChB,QACAipC,GAAMG,OACFH,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUa,OAAOpyC,UAEnD,YACD,MACA,SACC,UACC,eACO,WAER,2BACgBkiB,EAAW/jB,GAAjC,yBACiB,kBACA,oBACA,GAErB+jB,gBAIHkmB,SAASgK,OAAOpyC,GAAQ4lC,KAGpBqO,gBAAgBp3C,KAAKwC,KAAMumC,qCA1S3B,SAmTE5lC,EAAMkiB,OACXiwB,EAAW/M,GAAMjpC,cACnB,WACAipC,GAAMG,OACFH,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUlkC,QAAQrN,SAErD,MACA,UACE,OACD,8BACS,GAEnBkiB,OAKK,WAATliB,EAAmB,GACVsN,YAAY83B,GAAMjpC,cAAc,OAAQ,KAAM,UAEnD+3C,EAAS,UACLl0C,OACC,WACQ6wC,GAAS,SAAUxxC,KAAK0lC,kBAGhC,WACQ8L,GAAS,WAAYxxC,KAAK0lC,UAOlC+D,UAAT,KAA0BoL,EAAOhH,0BAGhC9E,SAAS/6B,QAAQrN,GAAQmyC,EAEvBA,cA1VE,SA8VFnyC,OACDkiB,EAAakjB,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUlkC,QAAQrN,IAE3EynC,EAAYrC,GAAMjpC,cAAc,MAAOipC,GAAMG,OAAOrjB,uBACjCA,EAAW0nB,mBAClBiH,GAAS7wC,EAAMX,KAAK0lC,UAClC,qBAGCqD,SAAS/6B,QAAQrN,GAAQynC,EAEvBA,kBAzWE,SA6WEnqC,EAAOya,EAAM/X,EAAM+wC,OAAOsC,EAA+BvzC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAvB,KAAMq0C,EAAiBr0C,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAC9D6tC,EAAOvI,GAAMjpC,cAAc,MAE3Bu3C,EAAQtO,GAAMjpC,cAAc,eACvBkD,KAAK0lC,OAAO0N,WAAWoB,UAG5BO,EAAQhP,GAAMjpC,cAChB,QACAipC,GAAMG,OAAOH,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUa,OAAOpyC,UAChE,qBACQA,0BAGP,mBAITq0C,EAAOjP,GAAMjpC,cAAc,QAAU0tC,OAAQ,OAE7Cv8B,YAAY8mC,KACZ9mC,YAAY+mC,KACZC,mBAAmB,YAAavD,GAElC3L,GAAMlpC,GAAGosC,QAAQ+K,MACX/lC,YAAY+lC,KAGjB/lC,YAAYomC,KACZpmC,YAAYqgC,sBA1YR,eA8YK7sC,EAA2ChB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAlC,KAAMs2B,EAA4Bt2B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAArB,EAAGysC,EAAkBzsC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,MAEpDslC,GAAMlpC,GAAGosC,QAAQxnC,IAAYskC,GAAMlpC,GAAG4G,OAAOszB,QAK5Cme,EAAanP,GAAMuH,SAASttC,KAAKkzC,UAAY,IAG5CzJ,UAAY1D,GAAMoH,WAAWpW,EAAMme,EAAYhI,kBAxZ7C,WA6ZJltC,KAAK4lC,UAAU+J,KAKhB5J,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAASgK,OAAOE,YAC7BkC,SAAS33C,KAAKwC,KAAMA,KAAK+oC,SAASgK,OAAOE,OAAQjzC,KAAKo1C,MAAQ,EAAIp1C,KAAKizC,QAIhFlN,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAASoJ,QAAQK,UACjC/F,YAAYzsC,KAAK+oC,SAASoJ,QAAQK,KAAMxyC,KAAKo1C,OAAyB,IAAhBp1C,KAAKizC,mBAxa5D,SA6aJxxC,OAAQxD,EAAWwC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAH,EAChBslC,GAAMlpC,GAAGosC,QAAQxnC,OAKfxD,MAAQA,KAGN22C,gBAAgBp3C,KAAKwC,KAAMyB,oBAtb3B,SA0bE8iB,iBACNvkB,KAAK4lC,UAAU+J,IAAO5J,GAAMlpC,GAAG0nB,MAAMA,QAItCtmB,EAAQ,KAkBRsmB,SACQA,EAAM5jB,UAEL,iBACA,cACA,WACOolC,GAAMsP,cAAcr1C,KAAKkxC,YAAalxC,KAAKkzC,UAGhC,eAAf3uB,EAAM5jB,SACGw0C,SAAS33C,KAAKwC,KAAMA,KAAK+oC,SAASgK,OAAOC,KAAM/0C,aAM3D,cACA,YAjCO,SAACwD,EAAQ8kC,OACnBtoC,EAAQ8nC,GAAMlpC,GAAG4G,OAAO8iC,GAASA,EAAQ,EACzCuM,EAAW/M,GAAMlpC,GAAGosC,QAAQxnC,GAAUA,EAAS2+B,EAAK2I,SAAS/6B,QAAQlG,UAGvEi+B,GAAMlpC,GAAGosC,QAAQ6J,GAAW,GACnB70C,MAAQA,MAGXo2C,EAAQvB,EAASwC,qBAAqB,QAAQ,GAChDvP,GAAMlpC,GAAGosC,QAAQoL,OACXxL,WAAW,GAAG0M,UAAYt3C,KAuBpB+B,KAAK+oC,SAAS/6B,QAAQlG,OAAwB,IAAhB9H,KAAKw1C,6BAnelD,SA8eG/zC,OAENohC,EAAQkD,GAAMlpC,GAAG0nB,MAAM9iB,GAAUA,EAAOA,OAASA,EAGlDskC,GAAMlpC,GAAGosC,QAAQpG,IAAyC,UAA/BA,EAAM8J,aAAa,YAK7CrE,aAAa,gBAAiBzF,EAAM5kC,OAGrC2xC,GAAQ6F,YAKP1nC,MAAM2nC,YAAY,UAAc7S,EAAM5kC,MAAQ4kC,EAAMx+B,IAAM,IAAhE,yBAhgBS,SAogBKkgB,iBAGTvkB,KAAK0lC,OAAOiQ,SAAS3C,MACrBjN,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAASgK,OAAOC,OACtCjN,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS/6B,QAAQmlC,cACtB,IAAlBnzC,KAAKkzC,cAML0C,EAAU,EACRC,EAAa71C,KAAK+oC,SAAS+J,SAASgD,wBACpCC,EAAa/1C,KAAK0lC,OAAO0N,WAAWC,QAApC,YAEAhsB,EAAS,SAAA2uB,MACLC,YAAYC,EAAKnN,SAAS/6B,QAAQmlC,YAAa4C,EAAS1uB,OAI9DrnB,KAAKm2C,SACE,WAKPpQ,GAAMlpC,GAAG0nB,MAAMA,KACL,IAAMsxB,EAAW3G,OAAS3qB,EAAM6xB,MAAQP,EAAWxf,UAC1D,CAAA,IAAI0P,GAAMsQ,SAASr2C,KAAK+oC,SAAS/6B,QAAQmlC,YAAa4C,YAC/CO,WAAWt2C,KAAK+oC,SAAS/6B,QAAQmlC,YAAYplC,MAAMsoB,KAAM,IAMnEuf,EAAU,IACA,EACHA,EAAU,QACP,QAILW,kBAAkB/4C,KAAKwC,KAAMA,KAAK+oC,SAAS/6B,QAAQmlC,YAAanzC,KAAKkzC,SAAW,IAAM0C,QAG1F7M,SAAS/6B,QAAQmlC,YAAYplC,MAAMsoB,KAAUuf,EAAlD,IAII7P,GAAMlpC,GAAG0nB,MAAMA,KACf,aACA,cACFzK,SAASyK,EAAM5jB,SACS,eAAf4jB,EAAM5jB,oBA1jBR,SA+jBF4jB,OAEDiyB,GAAUzQ,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS/6B,QAAQklC,WAAalzC,KAAK0lC,OAAO+Q,cAGvEF,kBAAkB/4C,KAAKwC,KAAMA,KAAK+oC,SAAS/6B,QAAQkjC,YAAasF,EAASx2C,KAAKkzC,SAAWlzC,KAAKkxC,YAAclxC,KAAKkxC,YAAasF,GAGnIjyB,GAAwB,eAAfA,EAAM5jB,MAAyBX,KAAKqwC,MAAMqG,YAK9CC,eAAen5C,KAAKwC,KAAMukB,mBA5kB1B,cAklBJvkB,KAAK4lC,UAAU+J,KAAQ3vC,KAAK0lC,OAAO+Q,aAAcz2C,KAAKkxC,kBAKrD0F,EAAc7Q,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS/6B,QAAQklC,WAGtD0D,GAAe52C,KAAK0lC,OAAOmR,iBAAmB72C,KAAK82C,WAC3CP,kBAAkB/4C,KAAKwC,KAAMA,KAAK+oC,SAAS/6B,QAAQkjC,YAAalxC,KAAKkzC,UAI9E0D,MACSL,kBAAkB/4C,KAAKwC,KAAMA,KAAK+oC,SAAS/6B,QAAQklC,SAAUlzC,KAAKkzC,aAItE6D,kBAAkBv5C,KAAKwC,kBApmBvB,SAwmBHg3C,EAAS3vB,MACTghB,aAAaroC,KAAK+oC,SAAS4J,SAASsE,KAAKD,IAAW3vB,mBAzmBjD,SA8mBEglB,iBAENtG,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS4J,SAASuE,MAAMC,cAK7Cz+B,EAAO1Y,KAAK+oC,SAAS4J,SAASuE,MAAMC,QAAQhM,cAAc,MAG5DpF,GAAMlpC,GAAGoqC,MAAMoF,UACVA,QAAQ8K,QAAU9K,EAAQ9yB,OAAO,SAAA49B,UAAWC,EAAK1R,OAAOyR,QAAQ9K,QAAQvyB,SAASq9B,UAIpF9vB,GAAU0e,GAAMlpC,GAAGgrB,MAAM7nB,KAAKqsC,QAAQ8K,UAAYn3C,KAAKqsC,QAAQ8K,QAAQ/2C,OAAS,QAC7Ei3C,UAAU75C,KAAKwC,KAVX,UAUuBqnB,MAG3BiwB,UAAU95C,KAAKwC,MAGnBqnB,MAKCkwB,aAAa7+B,QAkCd2zB,QAAQ8K,QACR3/B,KAAK,SAAC7a,EAAG2D,OACAk3C,EAAUJ,EAAK1R,OAAOyR,QAAQ9K,eAC7BmL,EAAQ59B,QAAQjd,GAAK66C,EAAQ59B,QAAQtZ,GAAK,GAAK,IAEzDqZ,QAAQ,SAAAw9B,OACC9C,EAAQ1C,GAAS8F,SAASj6C,KAAK45C,EAAM,UAAWD,MAC7CO,eAAel6C,KAAK45C,EAAMD,EAASz+B,EA9DvC,UA8DmD27B,EAtC/C,SAAA8C,OACT9C,EAAQ,UAEJ8C,QACC,OACO,gBAGP,UACA,UACA,MACO,gBAGP,SACA,MACO,YAOX9C,EAAMj0C,OAIJuxC,GAASgG,YAAYn6C,KAAK45C,EAAM/C,GAH5B,KAcwDuD,CAAST,SAGvEU,cAAcr6C,KAAKwC,KAjEf,UAiE2B0Y,eArrB/B,SA0rBJs+B,EAAS/4C,UACN+4C,OACC,eACgB,IAAV/4C,EAAcuzC,GAAS,SAAUxxC,KAAK0lC,QAAaznC,EAAnD,cAEN,iBACG8nC,GAAMlpC,GAAG4G,OAAOxF,GACNA,EAAV,IAGG8nC,GAAMgI,YAAY9vC,OAExB,kBACM20C,GAAS6E,SAASj6C,KAAKwC,qBAGvB,qBA1sBN,SA+sBCg3C,EAAS5O,EAAW7B,OACxBuR,EAAO93C,KAAK+oC,SAAS4J,SAASuE,MAAMF,GACtC/4C,EAAQ,KACRya,EAAO0vB,SAEH4O,OACC,aACGh3C,KAAK4yC,SAASmF,OACV/3C,KAAKqsC,QAAQuG,SAASxyC,OAAS,IAAMJ,KAAKqsC,QAAQuG,SAAS14B,KAAK,SAAA89B,SAAiB,YAATA,IAChEh4C,KAAK4yC,SAASqF,SAEd,UAGJ,sBAMHlS,GAAMlpC,GAAGgrB,MAAM0e,GAAiBvmC,KAAKg3C,GAAbzQ,EAG7BR,GAAMlpC,GAAGgrB,MAAM5pB,OACP+B,KAAK0lC,OAAOsR,GAASkB,UAI5BnS,GAAMlpC,GAAGgrB,MAAM7nB,KAAKqsC,QAAQ2K,MAAch3C,KAAKqsC,QAAQ2K,GAASl9B,SAAS7b,oBACrEszC,MAAM+B,KAAX,yBAAyCr1C,EAAzC,SAAuD+4C,OAKtDh3C,KAAK0lC,OAAOsR,GAAS3K,QAAQvyB,SAAS7b,oBAClCszC,MAAM+B,KAAX,sBAAsCr1C,EAAtC,SAAoD+4C,MAQ3DjR,GAAMlpC,GAAGosC,QAAQvwB,OACXo/B,GAAQA,EAAK3M,cAAc,OAIjCpF,GAAMlpC,GAAGosC,QAAQvwB,IAKR1Y,KAAK+oC,SAAS4J,SAASsE,KAAKD,GAAS7L,cAArC,IAAuDnrC,KAAK0lC,OAAO0N,WAAWa,KAAKh2C,OAC3F0qC,UAAYgJ,GAAS8F,SAASj6C,KAAKwC,KAAMg3C,EAAS/4C,OAGlDwD,EAASiX,GAAQA,EAAKyyB,cAAL,gBAAmCltC,EAAnC,MAEnB8nC,GAAMlpC,GAAGosC,QAAQxnC,OACVqzC,SAAU,qBA3wBZ,sBAk0BHp8B,EAAO1Y,KAAK+oC,SAAS4J,SAASuE,MAAMtE,SAASzH,cAAc,MAG3D9jB,EAASurB,GAASuF,UAAU36C,KAAKwC,MAAMI,aACpCi3C,UAAU75C,KAAKwC,KALX,WAKuBqnB,MAG9BkwB,aAAa7+B,MAGV4+B,UAAU95C,KAAKwC,MAGnBqnB,OAKC+wB,EAASxF,GAASuF,UAAU36C,KAAKwC,MAAMga,IAAI,SAAAq+B,mBAClCtS,GAAMlpC,GAAGgrB,MAAMwwB,EAAMJ,UAA6B,UAAjBI,EAAMJ,eAC3CrF,GAAS6E,SAASj6C,KAAK86C,EAAMD,QAIjCE,kBACO,SACH/G,GAAS,WAAYxxC,KAAK0lC,YAI9B/rB,QAAQ,SAAA0+B,MACFX,eAAel6C,KACpB86C,EACAD,EAAMJ,SACNv/B,EACA,WACA2/B,EAAMhE,MACa,YAAnBgE,EAAMJ,SAAyBtG,GAASgG,YAAYn6C,KAAK86C,EAAMD,EAAMJ,SAAStK,eAAiB,KAC/F0K,EAAMJ,SAASpK,gBAAkByK,EAAK1F,SAASqF,SAASpK,sBAK3DxB,QAAQuG,SAAWwF,EAAOp+B,IAAI,SAAAq+B,UAASA,EAAMJ,cAEzCJ,cAAcr6C,KAAKwC,KA9Cf,WA8C2B0Y,kBA/2B/B,SAm3BA2zB,iBAEJrsC,KAAK0lC,OAAOiM,SAAS73B,SAAS,aAAgB9Z,KAAK0lC,OAAOiN,SAAS74B,SAAS,UAK5EisB,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS4J,SAASuE,MAAMsB,QAO/CzS,GAAMlpC,GAAGoqC,MAAMoF,QACVA,QAAQmM,MAAQnM,GACdrsC,KAAKswC,SAAWtwC,KAAKy4C,gBACvBpM,QAAQmM,OACT,GACA,IACA,EACA,KACA,IACA,KACA,SAKHnM,QAAQmM,MAAQx4C,KAAKqsC,QAAQmM,MAAMj/B,OAAO,SAAAi/B,UAASE,EAAKhT,OAAO8S,MAAMnM,QAAQvyB,SAAS0+B,SAGrFnxB,GAAU0e,GAAMlpC,GAAGgrB,MAAM7nB,KAAKqsC,QAAQmM,QAAUx4C,KAAKqsC,QAAQmM,MAAMp4C,OAAS,QACzEi3C,UAAU75C,KAAKwC,KAtBX,QAsBuBqnB,MAG3BiwB,UAAU95C,KAAKwC,MAGnBqnB,OAKC3O,EAAO1Y,KAAK+oC,SAAS4J,SAASuE,MAAMsB,MAAMrN,cAAc,SAGxDoM,aAAa7+B,QAGd2zB,QAAQmM,MAAM7+B,QAAQ,SAAA6+B,OACjBnE,EAAQ1C,GAAS8F,SAASj6C,KAAKk7C,EAAM,QAASF,MAC3Cd,eAAel6C,KAAKk7C,EAAMF,EAAO9/B,EAzCjC,QAyC6C27B,QAGjDwD,cAAcr6C,KAAKwC,KA5Cf,QA4C2B0Y,gBA16B/B,eA+6BDu+B,EAASj3C,KAAK+oC,SAAS4J,SAAvBsE,KACFlB,GAAWhQ,GAAMlpC,GAAGgrB,MAAMovB,IAASz6C,OAAOqV,OAAOolC,GAAM/8B,KAAK,SAAAy+B,UAAQA,EAAInO,YAExEnC,aAAaroC,KAAK+oC,SAAS4J,SAASsB,MAAO8B,eAl7BxC,SAs7BFxxB,OACCq0B,EAAS54C,KAAK+oC,SAAS4J,SAAvBiG,KACFzE,EAASn0C,KAAK+oC,SAASoJ,QAAQQ,YAGhC5M,GAAMlpC,GAAGosC,QAAQ2P,IAAU7S,GAAMlpC,GAAGosC,QAAQkL,QAI3C0E,EAAO9S,GAAMlpC,GAAG4tC,QAAQlmB,GAASA,EAAQwhB,GAAMlpC,GAAGosC,QAAQ2P,IAASA,EAAKlO,aAAa,aAEvF3E,GAAMlpC,GAAG0nB,MAAMA,GAAQ,KACjBu0B,EAAa/S,GAAMlpC,GAAGosC,QAAQ2P,IAASA,EAAK9N,SAASvmB,EAAM9iB,QAC3Ds3C,EAAWx0B,EAAM9iB,SAAWzB,KAAK+oC,SAASoJ,QAAQQ,YAKpDmG,IAAgBA,IAAeC,GAAYF,SAK3CE,KACMC,kBAKVjT,GAAMlpC,GAAGosC,QAAQkL,MACV7L,aAAa,gBAAiBuQ,GAGrC9S,GAAMlpC,GAAGosC,QAAQ2P,QACXvQ,aAAauQ,GAAOC,MACpB5C,YAAYj2C,KAAK+oC,SAASX,UAAWpoC,KAAK0lC,OAAO0N,WAAWa,KAAK9lC,KAAM0qC,GAEzEA,IACKlO,gBAAgB,cAEhBrC,aAAa,YAAa,iBA99B9B,SAo+BFqQ,OACDM,EAAQN,EAAIxP,WAAU,KACtBp7B,MAAMmrC,SAAW,aACjBnrC,MAAMorC,QAAU,IAChBxO,gBAAgB,gBAGhB73B,KAAKmmC,EAAM/Q,iBAAiB,gBAAgBvuB,QAAQ,SAAA4sB,OAChD3lC,EAAO2lC,EAAMoG,aAAa,UAC1BrE,aAAa,OAAW1nC,EAA9B,cAIAwoC,WAAWn7B,YAAYgrC,OAGrB/J,EAAQ+J,EAAMG,YACdjK,EAAS8J,EAAMI,uBAGf3P,cAAcuP,+BAx/BX,eAigCLx3C,EAAahB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,GACLwzC,EAASj0C,KAAK+oC,SAAS4J,SAAvBsB,KACF6D,EAAOl7C,SAAS08C,eAAe73C,MAGhCskC,GAAMlpC,GAAGosC,QAAQ6O,IAKsB,aAA9BA,EAAKnL,aAAa,aAO1BG,EAAUmH,EAAK9I,cAAc,mCAC7B/C,EAAY0E,EAAQ1D,oBAGpBt2B,KAAKmhC,EAAK/L,iBAAL,mBAAyC4E,EAAQH,aAAa,MAA9D,OAA0EhzB,QAAQ,SAAA0N,KAClFihB,aAAa,iBAAiB,KAIrCgE,GAAQiN,cAAgBjN,GAAQkN,cAAe,GAErCzrC,MAAMmhC,MAAWpC,EAAQsM,YAAnC,OACUrrC,MAAMohC,OAAYrC,EAAQuM,aAApC,SAGMI,EAAO9H,GAAS+H,WAAWl8C,KAAKwC,KAAM83C,MAqBtCjM,GAAGzD,EAAWrC,GAAM4K,mBAlBV,SAAVgJ,EAAUt9C,GAERA,EAAEoF,SAAW2mC,IACb,QACA,UACFtuB,SAASzd,EAAEu9C,kBAKH7rC,MAAMmhC,MAAQ,KACdnhC,MAAMohC,OAAS,MAGnBrD,IAAI1D,EAAWrC,GAAM4K,mBAAoBgJ,QAOzC5rC,MAAMmhC,MAAWuK,EAAKvK,MAAhC,OACUnhC,MAAMohC,OAAYsK,EAAKtK,OAAjC,QAIE9G,aAAayE,GAAS,KACpBxE,aAAa,YAAa,MAG5BD,aAAayP,GAAM,OAEnBb,EAAOlR,GAAMwF,YAAY/tC,KAAKwC,KAAvB,mBAAgDyB,EAAhD,YACPqR,KAAKmkC,GAAMt9B,QAAQ,SAAAg/B,KACjBrQ,aAAa,iBAAiB,OAEjCqC,gBAAgB,cAGhBzC,iBAAiB,2DAA2D,GAAG0D,iBA3kC3E,SAglCNpwB,iBAECuqB,GAAMlpC,GAAGgrB,MAAM7nB,KAAK0lC,OAAOiM,iBACpB,SAILvJ,EAAYrC,GAAMjpC,cAAc,MAAOipC,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUP,SAAS32B,aAGxGhb,KAAK0lC,OAAOiM,SAAS73B,SAAS,cACpB7L,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,YAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,aACpB7L,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,WAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,WACpB7L,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,SAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,mBACpB7L,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,iBAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,YAAa,KACrCg5B,EAAW/M,GAAMjpC,cAAc,MAAOipC,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUY,WAG5FE,EAAOrB,GAASmI,YAAYt8C,KAAKwC,KAAM,wBACxBwb,EAAK1c,UAEjBmP,YAAY+kC,EAAKqB,SACjBpmC,YAAY+kC,EAAKzM,SAGjBt4B,YAAY0jC,GAASoI,eAAev8C,KAAKwC,KAAM,WAKpDA,KAAK0lC,OAAOiQ,SAAS3C,KAAM,KACrBK,EAAUtN,GAAMjpC,cAClB,cAEWkD,KAAK0lC,OAAO0N,WAAWC,SAElC,WAGKplC,YAAYolC,QAChBtK,SAAS/6B,QAAQmlC,YAAcE,OAGnCtK,SAAS+J,SAAWA,IACf7kC,YAAYjO,KAAK+oC,SAAS+J,aAIpC9yC,KAAK0lC,OAAOiM,SAAS73B,SAAS,mBACpB7L,YAAY0jC,GAASqI,WAAWx8C,KAAKwC,KAAM,gBAIrDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,eACpB7L,YAAY0jC,GAASqI,WAAWx8C,KAAKwC,KAAM,aAIrDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,WACpB7L,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,SAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,UAAW,KACnCm5B,EAASlN,GAAMjpC,cAAc,aACxB,iBAIL+lB,OACG,OACC,UACC7iB,KAAK0lC,OAAOuN,QAIjBpQ,EAAQ8O,GAASmI,YAAYt8C,KAC/BwC,KACA,SACA+lC,GAAMG,OAAOrjB,qBACUrH,EAAK1c,QAGzBmP,YAAY40B,EAAMwR,SAClBpmC,YAAY40B,EAAM0D,YAEpBwC,SAASkK,OAASA,IAEbhlC,YAAYglC,MAItBjzC,KAAK0lC,OAAOiM,SAAS73B,SAAS,eACpB7L,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,aAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,cAAgBisB,GAAMlpC,GAAGgrB,MAAM7nB,KAAK0lC,OAAOiN,UAAW,KAC9EsB,EAAOlO,GAAMjpC,cAAc,aACtB,oBACC,OAGPmR,YACD0jC,GAASkI,aAAar8C,KAAKwC,KAAM,uCACDwb,EAAK1c,oBAChB,mCACiB0c,EAAK1c,oBACtB,SAInB85C,EAAO7S,GAAMjpC,cAAc,cACtB,4CACc0e,EAAK1c,UAClB,8CACoC0c,EAAK1c,QAC3C,oBACK,IAGTm7C,EAAQlU,GAAMjpC,cAAc,OAE5Bo9C,EAAOnU,GAAMjpC,cAAc,2BACR0e,EAAK1c,GAA1B,mDAC4C0c,EAAK1c,QAC3C,aAIJm4C,EAAOlR,GAAMjpC,cAAc,WACvB,iBAIL4oC,OAAOiN,SAASh5B,QAAQ,SAAAhZ,OACnBg4C,EAAM5S,GAAMjpC,cAAc,WACtB,aACE,KAGNq3C,EAASpO,GAAMjpC,cACjB,SACAipC,GAAMG,OAAOH,GAAM4O,0BAA0BwF,EAAKzU,OAAOwM,UAAUC,QAAQQ,gBACjE,eACIwH,EAAKzU,OAAO0N,WAAWoB,QAAjC,IAA4C2F,EAAKzU,OAAO0N,WAAWoB,QAAnE,gCACqBh5B,EAAK1c,GAA1B,IAAgC6B,EAAhC,wBACiB,mCACiB6a,EAAK1c,GAAvC,IAA6C6B,mBAC5B,IAErB6wC,GAAS7wC,EAAMw5C,EAAKzU,SAGlBznC,EAAQ8nC,GAAMjpC,cAAc,cACvBq9C,EAAKzU,OAAO0N,WAAWa,KAAKh2C,UAIjC0qC,UAAYntB,EAAK7a,KAEhBsN,YAAYhQ,KACfgQ,YAAYkmC,KACXlmC,YAAY0qC,KAEZ5P,SAAS4J,SAASsE,KAAKt2C,GAAQg4C,MAGnC1qC,YAAYgpC,KACXhpC,YAAYisC,QAGbxU,OAAOiN,SAASh5B,QAAQ,SAAAhZ,OACnBm3C,EAAO/R,GAAMjpC,cAAc,2BACR0e,EAAK1c,GAA1B,IAAgC6B,SACxB,uCAC6B6a,EAAK1c,GAA1C,IAAgD6B,EAAhD,YACM,qBACK,IAGTy5C,EAAOrU,GAAMjpC,cACf,eAEU,eACIq9C,EAAKzU,OAAO0N,WAAWoB,QAAjC,IAA4C2F,EAAKzU,OAAO0N,WAAWoB,QAAnE,0BACiB,mCACiBh5B,EAAK1c,GAAvC,yBACiB,GAErB0yC,GAAS7wC,EAAMw5C,EAAKzU,WAGnBz3B,YAAYmsC,OAEX/N,EAAUtG,GAAMjpC,cAAc,QAE/BmR,YAAYo+B,KACXp+B,YAAY6pC,KAEb/O,SAAS4J,SAASuE,MAAMv2C,GAAQm3C,MAGpC7pC,YAAYgsC,KACZhsC,YAAY2qC,KACP3qC,YAAYgmC,QAEjBlL,SAAS4J,SAASiG,KAAOA,OACzB7P,SAAS4J,SAASsB,KAAOA,SAI9Bj0C,KAAK0lC,OAAOiM,SAAS73B,SAAS,QAAUwyB,GAAQmG,OACtCxkC,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,QAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,YAAcwyB,GAAQoG,WAC1CzkC,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,YAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,iBACpB7L,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,eAIvDA,KAAK0lC,OAAOiM,SAAS73B,SAAS,oBACzBivB,SAASX,UAAUn6B,YAAY0jC,GAASkI,aAAar8C,KAAKwC,KAAM,oBAGpE+oC,SAAS4I,SAAWvJ,EAErBpoC,KAAKswC,YACI+J,eAAe78C,KAAKwC,KAAM6wC,GAAMyJ,kBAAkB98C,KAAKwC,UAG3Du6C,aAAa/8C,KAAKwC,MAEpBooC,UA/0CE,yBAq1CLpoC,KAAK0lC,OAAO8U,WAAY,KAClB7G,EAAOhC,GAAS6B,WAAWh2C,KAAKwC,MAGlC2zC,EAAK/B,SACC4I,WAAW7G,EAAK1S,IAAK,oBAK9BniC,GAAKvD,KAAK2H,MAAsB,IAAhB3H,KAAKyD,cAGtBopC,EAAY,UACXW,SAAS4I,SAAW,SAGnB8I,MACEz6C,KAAKlB,YACCkB,KAAK0lC,OAAO+L,eACfzxC,KAAK0lC,OAAOgM,OAEnBgJ,GAAS,EAET3U,GAAMlpC,GAAG+zB,OAAO5wB,KAAK0lC,OAAOiM,WAAa5L,GAAMlpC,GAAGosC,QAAQjpC,KAAK0lC,OAAOiM,YAE1D3xC,KAAK0lC,OAAOiM,SACjB5L,GAAMlpC,GAAGovC,SAASjsC,KAAK0lC,OAAOiM,YAGzB3xC,KAAK0lC,OAAOiM,SAASn0C,KAAKwC,KAAMy6C,MAGhC9I,GAASnjC,OAAOhR,KAAKwC,SACzBA,KAAKlB,YACCkB,KAAK0lC,OAAO+L,eACfzxC,KAAKw4C,cACHx4C,KAAKm3C,iBACJvE,GAAS6E,SAASj6C,KAAKwC,WAI5B,OAIPgyB,EAAU,SAAAuU,OACR9gC,EAAS8gC,gBAEN30B,QAAQ6oC,GAAO9gC,QAAQ,SAAAowB,iBAC1BtrC,EAEEurC,EAAA,GADF/rC,EACE+rC,EAAA,KACOjE,GAAM+H,WAAWroC,EAAjB,IAA6BhH,EAA7B,IAAqCR,KAG3CwH,GAIPi1C,IACI3U,GAAMlpC,GAAG+zB,OAAO5wB,KAAK0lC,OAAOiM,YAChB3f,EAAQoW,GACbrC,GAAMlpC,GAAGosC,QAAQb,OACdO,UAAY3W,EAAQoW,EAAUO,iBAK5ClnC,OAAAA,KAGAskC,GAAMlpC,GAAG+zB,OAAO5wB,KAAK0lC,OAAOwM,UAAUP,SAASvJ,eACtCxrC,SAASuuC,cAAcnrC,KAAK0lC,OAAOwM,UAAUP,SAASvJ,YAI9DrC,GAAMlpC,GAAGosC,QAAQxnC,OACTzB,KAAK+oC,SAASX,WAIvBrC,GAAMlpC,GAAGosC,QAAQb,KACVn6B,YAAYm6B,GACZA,KACA6M,mBAAmB,YAAa7M,GAItCrC,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS4I,cACvBgJ,aAAan9C,KAAKwC,MAI3B1E,OAAOgrB,UAAUE,UAAU1M,SAAS,YAC9B8gC,QAAQn5C,GAIdzB,KAAK0lC,OAAOiQ,SAAShE,SAAU,KACzBkJ,EAAS9U,GAAMwF,YAAY/tC,KAC7BwC,MAEIA,KAAK0lC,OAAOwM,UAAUP,SAAS32B,QAC/B,IACAhb,KAAK0lC,OAAOwM,UAAU2I,OACtB,KACA76C,KAAK0lC,OAAO0N,WAAW5I,QACzB3qC,KAAK,WAGLiT,KAAK+nC,GAAQlhC,QAAQ,SAAA06B,MACjB4B,YAAY5B,EAAOyG,EAAKpV,OAAO0N,WAAW5I,QAAQ,MAClDyL,YAAY5B,EAAOyG,EAAKpV,OAAO0N,WAAWC,SAAS,KACnD/K,aAAa,OAAQ,gBC18CrCsK,UAAW,cAIJ5yC,KAAK4lC,UAAU+J,QAKdoL,EAAS/6C,KAAK2lC,QAAQjpC,IAAI,eAE3BqpC,GAAMlpC,GAAGgrB,MAAMkzB,UACXnI,SAASqF,SAAW8C,GAGzBhV,GAAMlpC,GAAGgrB,MAAM7nB,KAAK4yC,SAASqF,iBACxBrF,SAASqF,SAAWj4C,KAAK0lC,OAAOkN,SAASqF,SAASpK,gBAItD9H,GAAMlpC,GAAG4tC,QAAQzqC,KAAK4yC,SAASmF,QAAS,KACnCA,EAAS/3C,KAAK2lC,QAAQjpC,IAAI,YAE5BqpC,GAAMlpC,GAAG4tC,QAAQsN,QACZnF,SAASmF,OAASA,OAElBnF,SAASmF,OAAS/3C,KAAK0lC,OAAOkN,SAASmF,WAK/C/3C,KAAKwwC,SAAWxwC,KAAKg7C,WAAch7C,KAAKswC,UAAYhE,GAAQ2O,WAEzDlV,GAAMlpC,GAAGoqC,MAAMjnC,KAAK0lC,OAAOiM,WAAa3xC,KAAK0lC,OAAOiM,SAAS73B,SAAS,aAAe9Z,KAAK0lC,OAAOiN,SAAS74B,SAAS,gBAC1GohC,gBAAgB19C,KAAKwC,WAOjC+lC,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS6J,iBAC3B7J,SAAS6J,SAAW7M,GAAMjpC,cAAc,MAAOipC,GAAM4O,0BAA0B30C,KAAK0lC,OAAOwM,UAAUU,cAEpGuI,YAAYn7C,KAAK+oC,SAAS6J,SAAU5yC,KAAK+oC,SAAS/tB,aAItDi7B,YAAYj2C,KAAK+oC,SAASX,UAAWpoC,KAAK0lC,OAAO0N,WAAWR,SAASnN,SAAUM,GAAMlpC,GAAGgrB,MAAM+qB,GAASuF,UAAU36C,KAAKwC,YAGtHo4C,EAASxF,GAASuF,UAAU36C,KAAKwC,UAGnC+lC,GAAMlpC,GAAGgrB,MAAMuwB,OAKHrS,GAAM8J,aAIVkC,MAAQz2C,OAAOqlC,IAAK,KACtBoI,EAAW/oC,KAAKqwC,MAAMnI,iBAAiB,eAEvCp1B,KAAKi2B,GAAUpvB,QAAQ,SAAA0+B,OACnBx1C,EAAMw1C,EAAM1L,aAAa,OACzB9L,EAAOkF,GAAM6I,SAAS/rC,GAExBg+B,EAAKsB,WAAa7mC,OAAOqnC,SAAS9B,KAAKsB,WACvC,QACA,UACFroB,SAAS+mB,EAAKY,cAEPgH,MAAM5lC,EAAK,QACXukB,KAAK,SAAAob,KACI8F,aAAa,MAAOhtC,OAAOqlC,IAAI4B,gBAAgBC,MAExDrY,MAAM,cACGuf,cAAc2O,UAO/B+C,YAAY59C,KAAKwC,SAGjB64C,KAAKr7C,KAAKwC,MAGf+lC,GAAMlpC,GAAGoqC,MAAMjnC,KAAK0lC,OAAOiM,WAAa3xC,KAAK0lC,OAAOiM,SAAS73B,SAAS,aAAe9Z,KAAK0lC,OAAOiN,SAAS74B,SAAS,gBAC1GohC,gBAAgB19C,KAAKwC,sBA9FzB,yBAqGLA,KAAKswC,SAAWtwC,KAAKwwC,QAAS,IACrB2H,UAAU36C,KAAKwC,MAAM2Z,QAAQ,SAAA0+B,MAE5BxM,GAAGwM,EAAO,YAAa,SAAA9zB,UAASquB,GAASyI,OAAO79C,KAAK4iC,EAAM7b,OAI3Dtf,KAAO,eAIXq2C,EAAe1I,GAAS2I,gBAAgB/9C,KAAKwC,MAG/C+lC,GAAMlpC,GAAGw7C,MAAMiD,IAEXvzC,MAAM+K,KAAKwoC,EAAaE,gBAAkBp7C,WACjCi7C,OAAO79C,KAAKwC,KAAMs7C,QAG5Bt7C,KAAKy4C,SAAWz4C,KAAK4yC,SAASmF,aAChC0D,MAAMC,gBAAgB17C,KAAKi4C,qBA1H3B,kBAiILlS,GAAMlpC,GAAG4pC,gBAAgBzmC,KAAKqwC,UAK3BtoC,MAAM+K,KAAK9S,KAAKqwC,MAAM4K,gBAAkB1hC,OAAO,SAAA8+B,UAClD,WACA,aACFv+B,SAASu+B,EAAMjnC,yBAzIR,sBA8IHgnC,EAASxF,GAASuF,UAAU36C,KAAKwC,UAElCo4C,EAAOh4C,cACD,SAIPi4C,EAAQD,EAAO5+B,KAAK,SAAA6+B,UAASA,EAAMJ,SAASpK,gBAAkBqI,EAAK+B,YAGlEI,MACOtS,GAAMkM,WAAWz0C,KAAKwC,KAAM,mBAInCq4C,UACSD,EADF,GAAA,WAILC,YAjKE,SAqKJA,OACDiD,EAAejD,SAEdtS,GAAMlpC,GAAGw7C,MAAMiD,IAAiBhP,GAAQ2O,YAAcj7C,KAAK4yC,SAASmF,WACtDnF,GAAS2I,gBAAgB/9C,KAAKwC,OAG7C+lC,GAAMlpC,GAAGw7C,MAAMiD,GACVvV,GAAMlpC,GAAGgrB,MAAMyzB,EAAajH,OAI5BtO,GAAMlpC,GAAGgrB,MAAMyzB,EAAarD,UAI1BzG,GAAS,UAAWxxC,KAAK0lC,QAHrB2S,EAAMJ,SAAStK,cAJf2N,EAAajH,MAUrB7C,GAAS,WAAYxxC,KAAK0lC,gBAxLxB,SA4LNa,OAEG8R,EAAQtS,GAAMlpC,GAAG0nB,MAAMgiB,GAASA,EAAM9kC,OAAS8kC,EAC7CiV,EAAenD,EAAfmD,WACFzD,EAASyD,EAAWp7C,QAAUo7C,EAAW,GAI3CnD,IAHiBzF,GAAS2I,gBAAgB/9C,KAAKwC,QAQ/C+lC,GAAMlpC,GAAG8+C,IAAI5D,MACJ6D,QAAQp+C,KAAKwC,KAAM+3C,EAAO8D,mBAE1BD,QAAQp+C,KAAKwC,KAAM,SAG1BwsC,cAAchvC,KAAKwC,KAAMA,KAAKqwC,MAAO,uBA/MlC,SAmNL9J,MAECvmC,KAAK4lC,UAAU+J,MAIhB5J,GAAMlpC,GAAGosC,QAAQjpC,KAAK+oC,SAAS6J,UAAW,KACpCpK,EAAUzC,GAAMjpC,cAAc,WAG9By6C,aAAav3C,KAAK+oC,SAAS6J,cAG3BkJ,EAAW/V,GAAMlpC,GAAG4pC,gBAAgBF,GAAiB,GAARA,EAG/CR,GAAMlpC,GAAG+zB,OAAOkrB,KACRrS,UAAYqS,EAAQ/W,SAEpB92B,YAAY6tC,QAInB/S,SAAS6J,SAAS3kC,YAAYu6B,aAE9B+I,MAAM+B,KAAK,0CA5OX,eAmPLyE,EAAS/3C,KAAK2lC,QAAQjpC,IAAI,YAGzBqpC,GAAMlpC,GAAG4tC,QAAQsN,QAGbnF,SAASmF,OAASA,IAFT/3C,KAAK0lC,OAAOkN,SAAvBmF,OAKHA,OACM9B,YAAYj2C,KAAK+oC,SAASX,UAAWpoC,KAAK0lC,OAAO0N,WAAWR,SAASmF,QAAQ,MAC7EtL,YAAYzsC,KAAK+oC,SAASoJ,QAAQS,UAAU,MCpQxDmJ,GAAO,aAEQC,GAAAA,4BACLvW,EAAiBhlC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,mBACpBglC,QAAUnqC,OAAO4tB,SAAWuc,EAE7BzlC,KAAKylC,cACAr+B,IAAI,mEAMNpH,KAAKylC,QAAUhqC,SAASsE,UAAUkiB,KAAKzkB,KAAK0rB,QAAQ9hB,IAAK8hB,SAAW6yB,uCAIpE/7C,KAAKylC,QAAUhqC,SAASsE,UAAUkiB,KAAKzkB,KAAK0rB,QAAQoqB,KAAMpqB,SAAW6yB,wCAIrE/7C,KAAKylC,QAAUhqC,SAASsE,UAAUkiB,KAAKzkB,KAAK0rB,QAAQO,MAAOP,SAAW6yB,SAnBhEC,GCFfC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,cAGF,sBAGQ,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACG31B,UAAU2xB,UAAY3xB,UAAU41B,cAAc38C,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,0BACF,aACC,oBACM,2BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iC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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.6' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","Storage","player","enabled","config","storage","supported","localStorage","getItem","utils","json","parse","extend","setItem","removeItem","providers","types","input","Boolean","nullOrUndefined","instanceof","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","responseType","request","XMLHttpRequest","responseText","response","statusText","send","minWidth","image","Image","naturalWidth","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","content","fetch","injectSprite","innerHTML","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","innerText","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","force","classList","contains","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","dispatchEvent","toggleState","pressed","getAttribute","_len","_key","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","defineProperty$1","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","i18n","getDeep","seekTime","title","controls","cors","iconUrl","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","_this7","isYouTube","textTracks","setCaptionsMenu","insertAfter","toggleCaptions","userLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","Player","autopause","disableTextTrack","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","insertElement","cancelRequests","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","setLanguage","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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A,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,0BACF,aACC,oBACM,2BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,wBAEL,UACA,UACA,SACD,SACA,SACA,wBAOA,gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,mDAMP,qBACI,kBACH,4BACA,mCACS,sCACR,6BACO,2BACV,oBACI,wBACA,uBACD,uBACC,wBACA,sBACF,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KC1YfxM,GAAU7J,GAAM8J,aAEtB,SAASwM,QACAj8C,KAAKqlC,aAKJ4O,EAASj0C,KAAKolC,OAAOuD,SAASsJ,QAAQU,WACxChN,GAAM9oC,GAAGgsC,QAAQoL,OACX5H,YAAY4H,EAAQj0C,KAAK63C,WAI7BzL,cAAc5uC,KAAKwC,KAAKolC,OAAQplC,KAAKyB,OAAQzB,KAAK63C,OAAS,kBAAo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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (utils.is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.language,\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n // Set toggled state\n this.toggleCaptions(active);\n\n // Watch changes to textTracks and update captions menu\n if (this.config.captions.update) {\n utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n update() {\n // Update tracks\n const tracks = captions.getTracks.call(this);\n this.options.captions = tracks.map(({language}) => language);\n\n // Set language if it hasn't been set already\n if (!this.language) {\n let { language } = this.config.captions;\n if (language === 'auto') {\n [ language ] = (navigator.language || navigator.userLanguage).split('-');\n }\n this.language = this.storage.get('language') || (language || '').toLowerCase();\n }\n\n // Toggle the class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Update available languages in list\n if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.9/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.9\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n // Bail if media duration isn't available yet\n if (!this.duration) {\n return;\n }\n\n // Validate input\n const inputIsValid = utils.is.number(input) && input > 0;\n\n // Set\n this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // Media duration can be NaN before the media has loaded\n const duration = (this.media || {}).duration || 0;\n\n // If config duration is funky, use regular duration\n return fauxDuration || duration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active);\n\n // Update state and trigger event\n if (active !== this.captions.active) {\n this.captions.active = active;\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 9a6da95f..28909e27 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -226,9 +226,14 @@ gulp.task('watch', () => { gulp.watch(paths.demo.src.sass, tasks.sass); }); +// Build distribution +gulp.task('build', () => { + run(tasks.clean, tasks.js, tasks.sass, tasks.sprite); +}); + // Default gulp task gulp.task('default', () => { - run(tasks.clean, tasks.js, tasks.sass, tasks.sprite, 'watch'); + run('build', 'watch'); }); // Publish a version to CDN and demo diff --git a/package.json b/package.json index 950af4f6..db086d03 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,8 @@ "doc": "readme.md" }, "scripts": { + "build": "gulp build", + "lint": "eslint src/js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Sam Potts <sam@potts.es>", @@ -303,7 +303,7 @@ Note the single quotes encapsulating the JSON and double quotes on the object ke | `invertTime` | Boolean | `true` | Display the current time as a countdown rather than an incremental counter. | | `toggleInvert` | Boolean | `true` | Allow users to click to toggle the above. | | `listeners` | Object | `null` | Allows binding of event listeners to the controls before the default handlers. See the `defaults.js` for available listeners. If your handler prevents default on the event (`event.preventDefault()`), the default handler will not fire. | -| `captions` | Object | `{ active: false, language: window.navigator.language.split('-')[0] }` | `active`: Toggles if captions should be active by default. `language`: Sets the default language to load (if available). | +| `captions` | Object | `{ active: false, language: 'auto', update: false }` | `active`: Toggles if captions should be active by default. `language`: Sets the default language to load (if available). 'auto' uses the browser language. `update`: Listen to changes to tracks and update menu. This is needed for some streaming libraries, but can result in unselectable language options). | | `fullscreen` | Object | `{ enabled: true, fallback: true, iosNative: false }` | `enabled`: Toggles whether fullscreen should be enabled. `fallback`: Allow fallback to a full-window solution. `iosNative`: whether to use native iOS fullscreen when entering fullscreen (no custom controls) | | `ratio` | String | `16:9` | The aspect ratio you want to use for embedded players. | | `storage` | Object | `{ enabled: true, key: 'plyr' }` | `enabled`: Allow use of local storage to store user settings. `key`: The key name to use. | diff --git a/src/js/captions.js b/src/js/captions.js index df717351..30c4bc74 100644 --- a/src/js/captions.js +++ b/src/js/captions.js @@ -16,28 +16,6 @@ const captions = { return; } - // Set default language if not set - const stored = this.storage.get('language'); - - if (!utils.is.empty(stored)) { - this.captions.language = stored; - } - - if (utils.is.empty(this.captions.language)) { - this.captions.language = this.config.captions.language.toLowerCase(); - } - - // Set captions enabled state if not set - if (!utils.is.boolean(this.captions.active)) { - const active = this.storage.get('captions'); - - if (utils.is.boolean(active)) { - this.captions.active = active; - } else { - this.captions.active = this.config.captions.active; - } - } - // Only Vimeo and HTML5 video supported at this point if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) { // Clear menu and hide @@ -55,17 +33,6 @@ const captions = { utils.insertAfter(this.elements.captions, this.elements.wrapper); } - // Set the class hook - utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); - - // Get tracks - const tracks = captions.getTracks.call(this); - - // If no caption file exists, hide container for caption text - if (utils.is.empty(tracks)) { - return; - } - // Get browser info const browser = utils.getBrowser(); @@ -94,14 +61,45 @@ const captions = { }); } - // Set language - captions.setLanguage.call(this); + // Try to load the value from storage + let active = this.storage.get('captions'); + + // Otherwise fall back to the default config + if (!utils.is.boolean(active)) { + ({ active } = this.config.captions); + } - // Enable UI - captions.show.call(this); + // Set toggled state + this.toggleCaptions(active); - // Set available languages in list - if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) { + // Watch changes to textTracks and update captions menu + if (this.config.captions.update) { + utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this)); + } + + // Update available languages in list next tick (the event must not be triggered before the listeners) + setTimeout(captions.update.bind(this), 0); + }, + + update() { + // Update tracks + const tracks = captions.getTracks.call(this); + this.options.captions = tracks.map(({language}) => language); + + // Set language if it hasn't been set already + if (!this.language) { + let { language } = this.config.captions; + if (language === 'auto') { + [ language ] = (navigator.language || navigator.userLanguage).split('-'); + } + this.language = this.storage.get('language') || (language || '').toLowerCase(); + } + + // Toggle the class hooks + utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); + + // Update available languages in list + if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) { controls.setCaptionsMenu.call(this); } }, @@ -247,24 +245,6 @@ const captions = { this.debug.warn('No captions element to render to'); } }, - - // Display captions container and button (for initialization) - show() { - // Try to load the value from storage - let active = this.storage.get('captions'); - - // Otherwise fall back to the default config - if (!utils.is.boolean(active)) { - ({ active } = this.config.captions); - } else { - this.captions.active = active; - } - - if (active) { - utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true); - utils.toggleState(this.elements.buttons.captions, true); - } - }, }; export default captions; diff --git a/src/js/controls.js b/src/js/controls.js index c76bd66b..20518f9c 100644 --- a/src/js/controls.js +++ b/src/js/controls.js @@ -664,27 +664,7 @@ const controls = { // Get the badge HTML for HD, 4K etc const getBadge = quality => { - let label = ''; - - switch (quality) { - case 2160: - label = '4K'; - break; - - case 1440: - case 1080: - case 720: - label = 'HD'; - break; - - case 576: - case 480: - label = 'SD'; - break; - - default: - break; - } + const label = i18n.get(`qualityBadge.${quality}`, this.config); if (!label.length) { return null; @@ -708,7 +688,6 @@ const controls = { }, // Translate a value into a nice label - // TODO: Localisation getLabel(setting, value) { switch (setting) { case 'speed': @@ -716,7 +695,13 @@ const controls = { case 'quality': if (utils.is.number(value)) { - return `${value}p`; + const label = i18n.get(`qualityLabel.${value}`, this.config); + + if (!label.length) { + return `${value}p`; + } + + return label; } return utils.toTitleCase(value); @@ -883,13 +868,10 @@ const controls = { 'language', track.label, track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null, - track.language.toLowerCase() === this.captions.language.toLowerCase(), + track.language.toLowerCase() === this.language, ); }); - // Store reference - this.options.captions = tracks.map(track => track.language); - controls.updateSetting.call(this, type, list); }, diff --git a/src/js/defaults.js b/src/js/defaults.js index 505520a5..8d92219a 100644 --- a/src/js/defaults.js +++ b/src/js/defaults.js @@ -115,7 +115,10 @@ const defaults = { // Captions settings captions: { active: false, - language: (navigator.language || navigator.userLanguage).split('-')[0], + language: 'auto', + // Listen to new tracks added after Plyr is initialized. + // This is needed for streaming captions, but may result in unselectable options + update: false, }, // Fullscreen settings @@ -187,6 +190,14 @@ const defaults = { disabled: 'Disabled', enabled: 'Enabled', advertisement: 'Ad', + qualityBadge: { + 2160: '4K', + 1440: 'HD', + 1080: 'HD', + 720: 'HD', + 576: 'SD', + 480: 'SD', + }, }, // URLs @@ -311,9 +322,8 @@ const defaults = { display: { currentTime: '.plyr__time--current', duration: '.plyr__time--duration', - buffer: '.plyr__progress--buffer', - played: '.plyr__progress--played', - loop: '.plyr__progress--loop', + buffer: '.plyr__progress__buffer', + loop: '.plyr__progress__loop', // Used later volume: '.plyr__volume--display', }, progress: '.plyr__progress', diff --git a/src/js/html5.js b/src/js/html5.js index 3818a441..63596cfc 100644 --- a/src/js/html5.js +++ b/src/js/html5.js @@ -99,6 +99,13 @@ const html5 = { // Set new source player.media.src = supported[0].getAttribute('src'); + // Restore time + const onLoadedMetaData = () => { + player.currentTime = currentTime; + player.off('loadedmetadata', onLoadedMetaData); + }; + player.on('loadedmetadata', onLoadedMetaData); + // Load new source player.media.load(); @@ -107,9 +114,6 @@ const html5 = { player.play(); } - // Restore time - player.currentTime = currentTime; - // Trigger change event utils.dispatchEvent.call(player, player.media, 'qualitychange', false, { quality: input, diff --git a/src/js/i18n.js b/src/js/i18n.js index 58c3e7cf..62e5bdb0 100644 --- a/src/js/i18n.js +++ b/src/js/i18n.js @@ -6,11 +6,15 @@ import utils from './utils'; const i18n = { get(key = '', config = {}) { - if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) { + if (utils.is.empty(key) || utils.is.empty(config)) { return ''; } - let string = config.i18n[key]; + let string = utils.getDeep(config.i18n, key); + + if (utils.is.empty(string)) { + return ''; + } const replace = { '{seektime}': config.seekTime, diff --git a/src/js/plyr.js b/src/js/plyr.js index 4a064e09..cfce37c9 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -675,7 +675,7 @@ class Plyr { quality = Number(input); } - if (!utils.is.number(quality) || quality === 0) { + if (!utils.is.number(quality)) { quality = this.storage.get('quality'); } @@ -838,24 +838,19 @@ class Plyr { } // If the method is called without parameter, toggle based on current value - const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active); - - // Nothing to change... - if (this.captions.active === show) { - return; - } - - // Set global - this.captions.active = show; + const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active); // Toggle state - utils.toggleState(this.elements.buttons.captions, this.captions.active); + utils.toggleState(this.elements.buttons.captions, active); // Add class hook - utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active); + utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active); - // Trigger an event - utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); + // Update state and trigger event + if (active !== this.captions.active) { + this.captions.active = active; + utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); + } } /** diff --git a/src/js/ui.js b/src/js/ui.js index 3a8f2d05..d6ab0e59 100644 --- a/src/js/ui.js +++ b/src/js/ui.js @@ -55,8 +55,10 @@ const ui = { // Remove native controls ui.toggleNativeControls.call(this); - // Captions - captions.setup.call(this); + // Setup captions for HTML5 + if (this.isHTML5) { + captions.setup.call(this); + } // Reset volume this.volume = null; @@ -109,6 +111,12 @@ const ui = { if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) { ui.setPoster.call(this, this.poster); } + + // Manually set the duration if user has overridden it. + // The event listeners for it doesn't get called if preload is disabled (#701) + if (this.config.duration) { + controls.durationUpdate.call(this); + } }, // Setup aria attribute for play and iframe title diff --git a/src/js/utils.js b/src/js/utils.js index 0334879d..b6ba0941 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -728,6 +728,11 @@ const utils = { return JSON.parse(JSON.stringify(object)); }, + // Get a nested value in an object + getDeep(object, path) { + return path.split('.').reduce((obj, key) => obj && obj[key], object); + }, + // Get the closest value in an array closest(array, value) { if (!utils.is.array(array) || !array.length) { diff --git a/src/sass/components/progress.scss b/src/sass/components/progress.scss index 60994f99..eddd32ab 100644 --- a/src/sass/components/progress.scss +++ b/src/sass/components/progress.scss @@ -5,16 +5,21 @@ .plyr__progress { display: flex; flex: 1; - position: relative; - margin-right: $plyr-range-thumb-height; left: $plyr-range-thumb-height / 2; + margin-right: $plyr-range-thumb-height; + position: relative; + + input[type='range'], + &__buffer { + margin-left: -($plyr-range-thumb-height / 2); + margin-right: -($plyr-range-thumb-height / 2); + // Offset the range thumb in order to be able to calculate the relative progress (#954) + width: calc(100% + #{$plyr-range-thumb-height}); + } input[type='range'] { position: relative; z-index: 2; - // Offset the range thumb in order to be able to calculate the relative progress (#954) - width: calc(100% + #{$plyr-range-thumb-height}) !important; - margin: 0 -#{$plyr-range-thumb-height / 2} !important; } // Seek tooltip to show time @@ -24,18 +29,17 @@ } } -.plyr__progress--buffer { +.plyr__progress__buffer { -webkit-appearance: none; /* stylelint-disable-line */ background: transparent; border: 0; border-radius: 100px; height: $plyr-range-track-height; left: 0; - margin: -($plyr-range-track-height / 2) 0 0; + margin-top: -($plyr-range-track-height / 2); padding: 0; position: absolute; top: 50%; - width: 100%; &::-webkit-progress-bar { background: transparent; @@ -63,17 +67,17 @@ } } -.plyr--video .plyr__progress--buffer { +.plyr--video .plyr__progress__buffer { box-shadow: 0 1px 1px rgba(#000, 0.15); color: $plyr-video-progress-buffered-bg; } -.plyr--audio .plyr__progress--buffer { +.plyr--audio .plyr__progress__buffer { color: $plyr-audio-progress-buffered-bg; } // Loading state -.plyr--loading .plyr__progress--buffer { +.plyr--loading .plyr__progress__buffer { animation: plyr-progress 1s linear infinite; background-image: linear-gradient( -45deg, @@ -90,10 +94,10 @@ color: transparent; } -.plyr--video.plyr--loading .plyr__progress--buffer { +.plyr--video.plyr--loading .plyr__progress__buffer { background-color: $plyr-video-progress-buffered-bg; } -.plyr--audio.plyr--loading .plyr__progress--buffer { +.plyr--audio.plyr--loading .plyr__progress__buffer { background-color: $plyr-audio-progress-buffered-bg; } diff --git a/src/sass/plyr.scss b/src/sass/plyr.scss index e934cf92..3d824f7d 100644 --- a/src/sass/plyr.scss +++ b/src/sass/plyr.scss @@ -31,12 +31,12 @@ @import 'components/controls'; @import 'components/embed'; @import 'components/menus'; -@import 'components/progress'; -@import 'components/poster'; @import 'components/sliders'; +@import 'components/poster'; @import 'components/times'; @import 'components/tooltips'; @import 'components/video'; +@import 'components/progress'; @import 'components/volume'; @import 'states/fullscreen'; @@ -2,48 +2,12 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz#a9c83233fa7cd06b39dc77adbb908616ff4f1962" - dependencies: - "@babel/highlight" "7.0.0-beta.42" - "@babel/code-frame@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" dependencies: "@babel/highlight" "7.0.0-beta.44" -"@babel/core@^7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.42.tgz#b3a838fddbd19663369a0b4892189fd8d3f82001" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/generator" "7.0.0-beta.42" - "@babel/helpers" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" - convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" - lodash "^4.2.0" - micromatch "^2.3.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.42.tgz#777bb50f39c94a7e57f73202d833141f8159af33" - dependencies: - "@babel/types" "7.0.0-beta.42" - jsesc "^2.5.1" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - "@babel/generator@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" @@ -54,14 +18,6 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/helper-function-name@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz#b38b8f4f85168d1812c543dd700b5d549b0c4658" - dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - "@babel/helper-function-name@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" @@ -70,46 +26,18 @@ "@babel/template" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" -"@babel/helper-get-function-arity@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz#ad072e32f912c033053fc80478169aeadc22191e" - dependencies: - "@babel/types" "7.0.0-beta.42" - "@babel/helper-get-function-arity@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" dependencies: "@babel/types" "7.0.0-beta.44" -"@babel/helper-split-export-declaration@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz#0d0d5254220a9cc4e7e226240306b939dc210ee7" - dependencies: - "@babel/types" "7.0.0-beta.42" - "@babel/helper-split-export-declaration@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" dependencies: "@babel/types" "7.0.0-beta.44" -"@babel/helpers@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0-beta.42.tgz#151c1c4e9da1b6ce83d54c1be5fb8c9c57aa5044" - dependencies: - "@babel/template" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - -"@babel/highlight@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.42.tgz#a502a1c0d6f99b2b0e81d468a1b0c0e81e3f3623" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - "@babel/highlight@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" @@ -118,15 +46,6 @@ esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/template@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.42.tgz#7186d4e70d44cdec975049ba0a73bdaf5cdee052" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" - lodash "^4.2.0" - "@babel/template@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" @@ -136,21 +55,6 @@ babylon "7.0.0-beta.44" lodash "^4.2.0" -"@babel/traverse@7.0.0-beta.42", "@babel/traverse@^7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.42.tgz#f4bf4d1e33d41baf45205e2d0463591d57326285" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/generator" "7.0.0-beta.42" - "@babel/helper-function-name" "7.0.0-beta.42" - "@babel/helper-split-export-declaration" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" - "@babel/traverse@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" @@ -166,14 +70,6 @@ invariant "^2.2.0" lodash "^4.2.0" -"@babel/types@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.42.tgz#1e2118767684880f6963801b272fd2b3348efacc" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - "@babel/types@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" @@ -206,14 +102,7 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -JSONStream@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1, abbrev@~1.1.1: +abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -231,18 +120,6 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce" - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.3.0, agentkeepalive@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.4.1.tgz#aa95aebc3a749bca5ed53e3880a09f5235b48f0c" - dependencies: - humanize-ms "^1.2.1" - ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -314,7 +191,7 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" -ansi-regex@^3.0.0, ansi-regex@~3.0.0: +ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" @@ -336,19 +213,11 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" -ansicolors@^0.3.2, ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - -ansistyles@^0.1.3, ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2, aproba@~1.2.0: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" -archy@^1.0.0, archy@~1.0.0: +archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" @@ -440,10 +309,6 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -932,9 +797,9 @@ babel-polyfill@^6.26.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" -babel-preset-env@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" +babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -963,7 +828,7 @@ babel-preset-env@^1.6.1: babel-plugin-transform-es2015-unicode-regex "^6.22.0" babel-plugin-transform-exponentiation-operator "^6.22.0" babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" + browserslist "^3.2.6" invariant "^2.2.2" semver "^5.3.0" @@ -1019,10 +884,6 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.42, babylon@^7.0.0-beta.42: - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" - babylon@7.0.0-beta.44: version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" @@ -1061,19 +922,9 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" -bin-links@^1.1.0, bin-links@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.2.tgz#fb74bd54bae6b7befc6c6221f25322ac830d9757" - dependencies: - bluebird "^3.5.0" - cmd-shim "^2.0.2" - gentle-fs "^2.0.0" - graceful-fs "^4.1.11" - write-file-atomic "^2.3.0" - -binaryextensions@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-1.0.1.tgz#1e637488b35b58bda5f4774bf96a5212a8c90755" +binaryextensions@2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" block-stream@*: version "0.0.9" @@ -1081,10 +932,6 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.5.0, bluebird@^3.5.1, bluebird@~3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1151,7 +998,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -browserslist@^2.1.2, browserslist@^2.11.3: +browserslist@^2.11.3: version "2.11.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" dependencies: @@ -1165,9 +1012,12 @@ browserslist@^3.1.1: caniuse-lite "^1.0.30000813" electron-to-chromium "^1.3.36" -buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" builtin-modules@^1.0.0: version "1.1.1" @@ -1177,55 +1027,6 @@ builtin-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - -byte-size@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.2.tgz#e8ddbf7161913965c6af5b236a4bed8896bdc83e" - -cacache@^10.0.0, cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.0.1.tgz#63cde88b51aa5f50741e34833c9d0048a138d1dd" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - figgy-pudding "^3.1.0" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.2" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^6.0.0" - unique-filename "^1.1.0" - y18n "^4.0.0" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -1240,10 +1041,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-limit@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz#6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea" - call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -1289,6 +1086,10 @@ caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.300008 version "1.0.30000815" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz#3a4258e6850362185adb11b0d754a48402d35bf6" +caniuse-lite@^1.0.30000844: + version "1.0.30000847" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000847.tgz#be77f439be29bbc57ae08004b1e470b653b1ec1d" + capture-stack-trace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" @@ -1333,6 +1134,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + character-entities-html4@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" @@ -1374,20 +1183,6 @@ cheerio@0.*: lodash.reject "^4.4.0" lodash.some "^4.4.0" -chownr@^1.0.1, chownr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" - -cidr-regex@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.8.tgz#c79bae6223d241c0860d93bfde1fb1c1c4fdcab6" - dependencies: - ip-regex "^2.1.0" - circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" @@ -1417,28 +1212,12 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" -cli-table2@^0.2.0, cli-table2@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/cli-table2/-/cli-table2-0.2.0.tgz#2d1ef7f218a0e786e214540562d4bd177fe32d97" - dependencies: - lodash "^3.10.1" - string-width "^1.0.1" - optionalDependencies: - colors "^1.1.2" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -1451,14 +1230,6 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" @@ -1498,13 +1269,6 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" -cmd-shim@^2.0.2, cmd-shim@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" - dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -1552,13 +1316,6 @@ colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -columnify@~1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" @@ -1569,9 +1326,9 @@ commander@^2.9.0: version "2.15.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.0.tgz#ad2a23a1c3b036e392469b8012cec6b33b4c1322" -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +commander@~2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" common-tags@^1.4.0: version "1.7.2" @@ -1587,15 +1344,6 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.5.0, concat-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - concat-stream@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" @@ -1616,13 +1364,6 @@ concat-with-sourcemaps@^1.0.0: dependencies: source-map "^0.6.1" -config-chain@~1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - configstore@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" @@ -1642,21 +1383,10 @@ contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" -convert-source-map@1.X, convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@1.X, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -1669,6 +1399,18 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" + cosmiconfig@^3.0.1, cosmiconfig@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" @@ -1687,6 +1429,14 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" +cosmiconfig@^5.0.0: + version "5.0.5" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" @@ -1767,10 +1517,6 @@ custom-event-polyfill@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/custom-event-polyfill/-/custom-event-polyfill-0.3.0.tgz#99807839be62edb446b645832e0d80ead6fa1888" -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -1802,7 +1548,7 @@ debug-fabulous@1.X: memoizee "0.4.X" object-assign "4.X" -debug@3.1.0, debug@3.X, debug@^3.0.0, debug@^3.0.1, debug@^3.1.0: +debug@3.X, debug@^3.0.0, debug@^3.0.1, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -1820,10 +1566,6 @@ debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -1847,7 +1589,7 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -defaults@^1.0.0, defaults@^1.0.3: +defaults@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" dependencies: @@ -1917,21 +1659,10 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - -detect-newline@2.X, detect-newline@^2.1.0: +detect-newline@2.X: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -dezalgo@^1.0.0, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - dependencies: - asap "^2.0.0" - wrappy "1" - dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" @@ -1997,10 +1728,6 @@ dot-prop@^4.1.0, dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -2015,40 +1742,23 @@ duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" -duplexify@^3.4.2, duplexify@^3.5.3: - version "3.5.4" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" +editions@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.36: version "1.3.38" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.38.tgz#49234b00c0592f62921f9426bccefee23de086bb" -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - dependencies: - once "^1.4.0" +electron-to-chromium@^1.3.47: + version "1.3.48" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz#d3b0d8593814044e092ece2108fc3ac9aea4b900" end-of-stream@~0.1.5: version "0.1.5" @@ -2060,16 +1770,6 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - -errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -2091,16 +1791,6 @@ es6-iterator@^2.0.1, es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - dependencies: - es6-promise "^4.0.3" - es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" @@ -2147,9 +1837,9 @@ eslint-module-utils@^2.2.0: debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-import@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz#15aeea37a67499d848e8e981806d4627b5503816" +eslint-plugin-import@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.12.0.tgz#dad31781292d6664b25317fd049d2e2b2f02205d" dependencies: contains-path "^0.1.0" debug "^2.6.8" @@ -2465,10 +2155,6 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -figgy-pudding@^3.0.0, figgy-pudding@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.1.0.tgz#a77ed2284175976c424b390b298569e9df86dd1e" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -2509,10 +2195,6 @@ find-index@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" -find-npm-prefix@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -2562,13 +2244,6 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2611,47 +2286,10 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" - -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2708,23 +2346,6 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" -genfun@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1" - -gentle-fs@^2.0.0, gentle-fs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.0.1.tgz#585cfd612bfc5cd52471fdb42537f016a5ce3687" - dependencies: - aproba "^1.1.2" - fs-vacuum "^1.2.10" - graceful-fs "^4.1.11" - iferr "^0.1.5" - mkdirp "^0.5.1" - path-is-inside "^1.0.2" - read-cmd-shim "^1.0.1" - slide "^1.1.6" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -2827,7 +2448,7 @@ glob@^6.0.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1, glob@~7.1.2: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2970,7 +2591,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@4.X, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@~4.1.11: +graceful-fs@4.X, graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -3047,15 +2668,25 @@ gulp-open@^3.0.1: plugin-log "^0.1.0" through2 "^2.0.1" -gulp-rename@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" +gulp-postcss@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/gulp-postcss/-/gulp-postcss-7.0.1.tgz#3f1c36db1197140c399c252ddff339129638e395" + dependencies: + fancy-log "^1.3.2" + plugin-error "^0.1.2" + postcss "^6.0.0" + postcss-load-config "^1.2.0" + vinyl-sourcemaps-apply "^0.2.1" -gulp-replace@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-0.6.1.tgz#11bf8c8fce533e33e2f6a8f2f430b955ba0be066" +gulp-rename@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.3.tgz#37b75298e9d3e6c0fe9ac4eac13ce3be5434646b" + +gulp-replace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-1.0.0.tgz#b32bd61654d97b8d78430a67b3e8ce067b7c9143" dependencies: - istextorbinary "1.0.2" + istextorbinary "2.2.1" readable-stream "^2.0.1" replacestream "^4.0.0" @@ -3126,13 +2757,13 @@ gulp-svgstore@^6.1.1: plugin-error "^0.1.2" vinyl "^2.1.0" -gulp-uglify-es@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gulp-uglify-es/-/gulp-uglify-es-1.0.1.tgz#9f991de31c646fb37fe589086ffd3f6e2f9e20f1" +gulp-uglify-es@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/gulp-uglify-es/-/gulp-uglify-es-1.0.4.tgz#59ee0d5ea98c1e09c6eaa58c8b018a6ad33f48d4" dependencies: o-stream "^0.2.2" plugin-error "^1.0.1" - uglify-es "^3.3.9" + terser "^3.7.5" vinyl "^2.1.0" vinyl-sourcemaps-apply "^0.2.1" @@ -3249,7 +2880,7 @@ has-gulplog@^0.1.0: dependencies: sparkles "^1.0.0" -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -3325,7 +2956,7 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hosted-git-info@^2.1.4, hosted-git-info@^2.4.2, hosted-git-info@^2.6.0: +hosted-git-info@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" @@ -3344,17 +2975,6 @@ htmlparser2@^3.9.1, htmlparser2@^3.9.2: inherits "^2.0.1" readable-stream "^2.0.2" -http-cache-semantics@^3.8.0, http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - -http-proxy-agent@^2.0.0, http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - dependencies: - agent-base "4" - debug "3.1.0" - http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -3371,43 +2991,10 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@^2.1.0, https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - dependencies: - ms "^2.0.0" - iconv-lite@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@~0.4.13: - version "0.4.21" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" - dependencies: - safer-buffer "^2.1.0" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - -iferr@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.0.tgz#36700e6a6d5d42e3e66b6d90fb55a018970b0aab" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - ignore@^3.3.3, ignore@^3.3.5: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" @@ -3449,7 +3036,7 @@ indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" -inflight@^1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: @@ -3464,23 +3051,10 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -3514,14 +3088,6 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - -ip@^1.1.4, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -3570,18 +3136,6 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - -is-cidr@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-2.0.5.tgz#13227927d71865d1177fe0e5b60e6ddd3dee0034" - dependencies: - cidr-regex "^2.0.8" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3867,12 +3421,13 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istextorbinary@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-1.0.2.tgz#ace19354d1a9a0173efeb1084ce0f87b0ad7decf" +istextorbinary@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.2.1.tgz#a5231a08ef6dd22b268d0895084cf8d58b5bec53" dependencies: - binaryextensions "~1.0.0" - textextensions "~1.0.0" + binaryextensions "2" + editions "^1.3.3" + textextensions "2" js-base64@^2.1.8, js-base64@^2.1.9: version "2.4.3" @@ -3882,7 +3437,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.9.0, js-yaml@^3.9.1: +js-yaml@^3.4.3, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: @@ -3912,10 +3467,6 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" @@ -3936,14 +3487,10 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json5@^0.5.0, json5@^0.5.1: +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -4005,10 +3552,6 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -4022,44 +3565,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libcipm@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-1.6.2.tgz#5a9d83b8606b9733cfff016ad9b37d3b8198ae09" - dependencies: - bin-links "^1.1.0" - bluebird "^3.5.1" - find-npm-prefix "^1.0.2" - graceful-fs "^4.1.11" - lock-verify "^2.0.0" - npm-lifecycle "^2.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.0.0" - pacote "^7.5.1" - protoduck "^5.0.0" - read-package-json "^2.0.12" - rimraf "^2.6.2" - worker-farm "^1.5.4" - -libnpmhook@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-4.0.1.tgz#63641654de772cbeb96a88527a7fd5456ec3c2d7" - dependencies: - figgy-pudding "^3.1.0" - npm-registry-fetch "^3.0.0" - -libnpx@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.0.tgz#1bf4a1c9f36081f64935eb014041da10855e3102" - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^11.0.0" - liftoff@^2.1.0: version "2.5.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" @@ -4112,19 +3617,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lock-verify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.0.1.tgz#6d671eea60b459c6048b3b26b62959208be67682" - dependencies: - npm-package-arg "^5.1.2" - semver "^5.4.1" - -lockfile@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - dependencies: - signal-exit "^3.0.2" - lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" @@ -4133,21 +3625,10 @@ lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - lodash._escapehtmlchar@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d" @@ -4201,7 +3682,7 @@ lodash._reunescapedhtml@~2.4.1: lodash._htmlescapes "~2.4.1" lodash.keys "~2.4.1" -lodash._root@^3.0.0, lodash._root@~3.0.0: +lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -4227,7 +3708,7 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.clonedeep@^4.3.2, lodash.clonedeep@~4.5.0: +lodash.clonedeep@^4.3.2: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -4387,32 +3868,16 @@ lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - -lodash.uniq@~4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - lodash.values@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4" dependencies: lodash.keys "~2.4.1" -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - lodash@>=3.10.0, lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" -lodash@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" @@ -4459,7 +3924,7 @@ lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: +lru-cache@^4.0.1: version "4.1.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" dependencies: @@ -4484,54 +3949,6 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-fetch-happen@^2.5.0, make-fetch-happen@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-2.6.0.tgz#8474aa52198f6b1ae4f3094c04e8370d35ea8a38" - dependencies: - agentkeepalive "^3.3.0" - cacache "^10.0.0" - http-cache-semantics "^3.8.0" - http-proxy-agent "^2.0.0" - https-proxy-agent "^2.1.0" - lru-cache "^4.1.1" - mississippi "^1.2.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^3.0.1" - ssri "^5.0.0" - -make-fetch-happen@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-3.0.0.tgz#7b661d2372fc4710ab5cc8e1fa3c290eea69a961" - dependencies: - agentkeepalive "^3.4.1" - cacache "^10.0.4" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.0" - lru-cache "^4.1.2" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^3.0.1" - ssri "^5.2.4" - -make-fetch-happen@^4.0.0, make-fetch-happen@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" - dependencies: - agentkeepalive "^3.4.1" - cacache "^11.0.1" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^4.1.2" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - make-iterator@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.0.tgz#57bef5dc85d23923ba23767324d8e8f8f3d9694b" @@ -4579,16 +3996,6 @@ mdast-util-compact@^1.0.0: unist-util-modify-children "^1.0.0" unist-util-visit "^1.1.0" -meant@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - memoizee@0.4.X: version "0.4.12" resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.12.tgz#780e99a219c50c549be6d0fc61765080975c58fb" @@ -4631,6 +4038,20 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + merge2@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.1.tgz#271d2516ff52d4af7f7b710b8bf3e16e183fef66" @@ -4753,64 +4174,6 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -minipass@^2.2.1, minipass@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.4.tgz#03c824d84551ec38a8d1bb5bc350a5a30a354a40" - dependencies: - safe-buffer "^5.1.1" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mississippi@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.1.tgz#2a8bb465e86550ac8b36a7b6f45599171d78671e" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^1.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -4818,31 +4181,16 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - multimatch@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" @@ -4858,7 +4206,7 @@ multipipe@^0.1.0, multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" -mute-stream@0.0.7, mute-stream@~0.0.4: +mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -4895,15 +4243,7 @@ next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-gyp@^3.3.1, node-gyp@^3.6.2: +node-gyp@^3.3.1: version "3.6.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" dependencies: @@ -4951,14 +4291,7 @@ node-sass@^4.8.3: dependencies: abbrev "1" -nopt@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.4.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -4981,248 +4314,13 @@ normalize-selector@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" -npm-audit-report@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.0.5.tgz#f16fa7c61459dd660913509685193148ce2cd85f" - dependencies: - ansicolors "^0.3.2" - ansistyles "^0.1.3" - cli-table2 "^0.2.0" - -npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" - -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - -npm-install-checks@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7" - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@^2.0.0, npm-lifecycle@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.0.1.tgz#897313f05ed24db8e28d99fa8b42c31b625e6237" - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.11" - node-gyp "^3.6.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.0" - -npm-logical-tree@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" - -"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - dependencies: - hosted-git-info "^2.6.0" - osenv "^0.1.5" - semver "^5.5.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz#fb18d17bb61e60900d6312619919bd753755ab37" - dependencies: - hosted-git-info "^2.4.2" - osenv "^0.1.4" - semver "^5.1.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.1.10, npm-packlist@~1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-pick-manifest@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz#dc381bdd670c35d81655e1d5a94aa3dd4d87fce5" - dependencies: - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-profile@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-3.0.1.tgz#65a1018340f14399a086b5d0a9bd0d13145d8e57" - dependencies: - aproba "^1.1.2" - make-fetch-happen "^2.5.0" - -npm-registry-client@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.5.1.tgz#8115809c0a4b40938b8a109b8ea74d26c6f5d7f1" - dependencies: - concat-stream "^1.5.2" - graceful-fs "^4.1.6" - normalize-package-data "~1.0.1 || ^2.0.0" - npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - once "^1.3.3" - request "^2.74.0" - retry "^0.10.0" - safe-buffer "^5.1.1" - semver "2 >=2.2.1 || 3.x || 4 || 5" - slide "^1.1.3" - ssri "^5.2.4" - optionalDependencies: - npmlog "2 || ^3.1.0 || ^4.0.0" - -npm-registry-fetch@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-1.1.1.tgz#710bc5947d9ee2c549375072dab6d5d17baf2eb2" - dependencies: - bluebird "^3.5.1" - figgy-pudding "^3.0.0" - lru-cache "^4.1.2" - make-fetch-happen "^3.0.0" - npm-package-arg "^6.0.0" - safe-buffer "^5.1.1" - -npm-registry-fetch@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.1.1.tgz#e96bae698afdd45d4a01aca29e881fc0bc55206c" - dependencies: - bluebird "^3.5.1" - figgy-pudding "^3.1.0" - lru-cache "^4.1.2" - make-fetch-happen "^4.0.0" - npm-package-arg "^6.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - -npm@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.0.0.tgz#f5518c860ab91586db2a24aad4de1433cda108d9" - dependencies: - JSONStream "^1.3.2" - abbrev "~1.1.1" - ansi-regex "~3.0.0" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - aproba "~1.2.0" - archy "~1.0.0" - bin-links "^1.1.2" - bluebird "~3.5.1" - byte-size "^4.0.2" - cacache "^11.0.1" - call-limit "~1.1.0" - chownr "~1.0.1" - cli-columns "^3.1.2" - cli-table2 "~0.2.0" - cmd-shim "~2.0.2" - columnify "~1.5.4" - config-chain "~1.1.11" - detect-indent "~5.0.0" - detect-newline "^2.1.0" - dezalgo "~1.0.3" - editor "~1.0.0" - figgy-pudding "^3.1.0" - find-npm-prefix "^1.0.2" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.0.1" - glob "~7.1.2" - graceful-fs "~4.1.11" - has-unicode "~2.0.1" - hosted-git-info "^2.6.0" - iferr "^1.0.0" - inflight "~1.0.6" - inherits "~2.0.3" - ini "^1.3.5" - init-package-json "^1.10.3" - is-cidr "^2.0.5" - json-parse-better-errors "^1.0.2" - lazy-property "~1.0.0" - libcipm "^1.6.2" - libnpmhook "^4.0.1" - libnpx "^10.2.0" - lockfile "~1.0.3" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "^4.1.2" - meant "~1.0.1" - mississippi "^3.0.0" - mkdirp "~0.5.1" - move-concurrently "^1.0.1" - node-gyp "^3.6.2" - nopt "~4.0.1" - normalize-package-data "~2.4.0" - npm-audit-report "^1.0.5" - npm-cache-filename "~1.0.2" - npm-install-checks "~3.0.0" - npm-lifecycle "^2.0.1" - npm-package-arg "^6.1.0" - npm-packlist "~1.1.10" - npm-pick-manifest "^2.1.0" - npm-profile "^3.0.1" - npm-registry-client "^8.5.1" - npm-registry-fetch "^1.1.0" - npm-user-validate "~1.0.0" - npmlog "~4.1.2" - once "~1.4.0" - opener "~1.4.3" - osenv "^0.1.5" - pacote "^8.1.0" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" - qrcode-terminal "^0.12.0" - query-string "^6.0.0" - qw "~1.0.1" - read "~1.0.7" - read-cmd-shim "~1.0.1" - read-installed "~4.0.3" - read-package-json "^2.0.13" - read-package-tree "^5.2.1" - readable-stream "^2.3.6" - request "^2.85.0" - retry "^0.12.0" - rimraf "~2.6.2" - safe-buffer "~5.1.1" - semver "^5.5.0" - sha "~2.0.1" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "^6.0.0" - strip-ansi "~4.0.0" - tar "^4.4.1" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "~1.1.0" - unpipe "~1.0.0" - update-notifier "^2.4.0" - uuid "^3.2.1" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "~3.0.0" - which "~1.3.0" - worker-farm "^1.6.0" - wrappy "~1.0.2" - write-file-atomic "^2.3.0" - -"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.0.0, npmlog@~4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -5304,7 +4402,7 @@ object.pick@^1.2.0, object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0, once@~1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -5322,10 +4420,6 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -opener@~1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" - opn@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" @@ -5355,7 +4449,7 @@ ordered-read-streams@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -5365,19 +4459,11 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@0, osenv@^0.1.4, osenv@^0.1.5: +osenv@0: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: @@ -5417,72 +4503,6 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pacote@^7.5.1: - version "7.6.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-7.6.1.tgz#d44621c89a5a61f173989b60236757728387c094" - dependencies: - bluebird "^3.5.1" - cacache "^10.0.4" - get-stream "^3.0.0" - glob "^7.1.2" - lru-cache "^4.1.1" - make-fetch-happen "^2.6.0" - minimatch "^3.0.4" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-package-arg "^6.0.0" - npm-packlist "^1.1.10" - npm-pick-manifest "^2.1.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.1" - semver "^5.5.0" - ssri "^5.2.4" - tar "^4.4.0" - unique-filename "^1.1.0" - which "^1.3.0" - -pacote@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-8.1.1.tgz#7ee85dad2bccf5524e5460508f833c60dddf5183" - dependencies: - bluebird "^3.5.1" - cacache "^11.0.1" - get-stream "^3.0.0" - glob "^7.1.2" - lru-cache "^4.1.2" - make-fetch-happen "^4.0.1" - minimatch "^3.0.4" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.10" - npm-pick-manifest "^2.1.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.1" - semver "^5.5.0" - ssri "^6.0.0" - tar "^4.4.1" - unique-filename "^1.1.0" - which "^1.3.0" - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - parse-entities@^1.0.2, parse-entities@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" @@ -5556,7 +4576,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -5680,6 +4700,13 @@ postcss-bem-linter@^3.0.0: postcss "^6.0.6" postcss-resolve-nested-selector "^0.1.1" +postcss-custom-properties@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-7.0.0.tgz#24dc4fbe6d6ed550ea4fd3b11204660e9ffa3b33" + dependencies: + balanced-match "^1.0.0" + postcss "^6.0.18" + postcss-html@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.12.0.tgz#39b6adb4005dfc5464df7999c0f81c95bced7e50" @@ -5696,16 +4723,11 @@ postcss-html@^0.15.0: remark "^9.0.0" unist-util-find-all-after "^1.0.1" -postcss-html@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.18.0.tgz#992a84117cc56f9f28915fbadba576489641e652" +postcss-html@^0.23.6: + version "0.23.7" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.23.7.tgz#47146c15e21b9c00746c40115dcff8270c439f32" dependencies: - "@babel/core" "^7.0.0-beta.42" - "@babel/traverse" "^7.0.0-beta.42" - babylon "^7.0.0-beta.42" htmlparser2 "^3.9.2" - remark "^9.0.0" - unist-util-find-all-after "^1.0.1" postcss-less@^1.1.0: version "1.1.3" @@ -5719,6 +4741,36 @@ postcss-less@^1.1.5: dependencies: postcss "^5.2.16" +postcss-load-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" + +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + +postcss-markdown@^0.23.6: + version "0.23.7" + resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.23.7.tgz#7e3a398794295c425e51e4f0abdee6d13ad3d134" + dependencies: + remark "^9.0.0" + unist-util-find-all-after "^1.0.2" + postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" @@ -5785,6 +4837,10 @@ postcss-sorting@^3.1.0: lodash "^4.17.4" postcss "^6.0.13" +postcss-syntax@^0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.9.1.tgz#5dbd90af1631ab8805b8f594bef2c2e8002d3758" + postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" @@ -5806,6 +4862,14 @@ postcss@^5.2.16: source-map "^0.5.6" supports-color "^3.2.3" +postcss@^6.0.0, postcss@^6.0.18: + version "6.0.22" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + postcss@^6.0.17: version "6.0.20" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.20.tgz#686107e743a12d5530cb68438c590d5b2bf72c3c" @@ -5893,70 +4957,10 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" -promise-inflight@^1.0.1, promise-inflight@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - -protoduck@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.0.tgz#752145e6be0ad834cb25716f670a713c860dce70" - dependencies: - genfun "^4.0.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" - dependencies: - duplexify "^3.5.3" - inherits "^2.0.3" - pump "^2.0.0" - punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -5965,10 +4969,6 @@ q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" @@ -5977,21 +4977,10 @@ qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -query-string@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.0.0.tgz#8b8f39447b73e8290d6f5e3581779218e9171142" - dependencies: - decode-uri-component "^0.2.0" - strict-uri-encode "^2.0.0" - quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -5999,9 +4988,9 @@ randomatic@^1.1.3: is-number "^3.0.0" kind-of "^4.0.0" -raven-js@^3.24.2: - version "3.24.2" - resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.24.2.tgz#c5cacb363b198812e80cd4c6714e5e478549ebcf" +raven-js@^3.25.2: + version "3.25.2" + resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.25.2.tgz#d3ad1c694f70855dda6f705204ee6ab76ba62884" rc@^1.0.1, rc@^1.1.6: version "1.2.6" @@ -6012,46 +5001,6 @@ rc@^1.0.1, rc@^1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" -read-cmd-shim@^1.0.1, read-cmd-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" - dependencies: - graceful-fs "^4.1.2" - -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.12, read-package-json@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - once "^1.3.0" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -6097,24 +5046,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - dependencies: - mute-stream "~0.0.4" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.4, readable-stream@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -6136,7 +5067,7 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.0.3" util-deprecate "~1.0.1" -readable-stream@~1.1.10, readable-stream@~1.1.9: +readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: @@ -6145,15 +5076,6 @@ readable-stream@~1.1.10, readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readdir-scoped-modules@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -6370,7 +5292,7 @@ replacestream@^4.0.0: object-assign "^4.0.1" readable-stream "^2.0.2" -request@2, request@^2.74.0, request@^2.85.0: +request@2: version "2.85.0" resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" dependencies: @@ -6426,6 +5348,10 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + require-from-string@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" @@ -6480,12 +5406,6 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.5.0: dependencies: path-parse "^1.0.5" -resolve@^1.3.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" - dependencies: - path-parse "^1.0.5" - resolve@^1.6.0: version "1.7.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" @@ -6503,15 +5423,7 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@~2.6.2: +rimraf@2, rimraf@^2.2.8: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -6564,12 +5476,6 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - dependencies: - aproba "^1.1.1" - run-sequence@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/run-sequence/-/run-sequence-2.2.1.tgz#1ce643da36fd8c7ea7e1a9329da33fc2b8898495" @@ -6592,20 +5498,12 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -safe-buffer@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: ret "~0.1.10" -safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -6632,7 +5530,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -6674,13 +5572,6 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -sha@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" - dependencies: - graceful-fs "^4.1.2" - readable-stream "^2.0.2" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -6709,18 +5600,6 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" -slide@^1.1.3, slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -smart-buffer@^1.0.13: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - -smart-buffer@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6760,45 +5639,6 @@ sntp@2.x.x: dependencies: hoek "4.x.x" -socks-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" - dependencies: - agent-base "^4.1.0" - socks "^1.1.10" - -socks-proxy-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" - dependencies: - agent-base "~4.2.0" - socks "~2.2.0" - -socks@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - -socks@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.0.tgz#144985b3331ced3ab5ccbee640ab7cb7d43fdd1f" - dependencies: - ip "^1.1.5" - smart-buffer "^4.0.1" - -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - source-map-resolve@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" @@ -6912,16 +5752,6 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -ssri@^5.0.0, ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.0.tgz#fc21bfc90e03275ac3e23d5a42e38b8a1cbc130d" - state-toggle@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" @@ -6953,34 +5783,12 @@ stream-counter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-1.0.0.tgz#91cf2569ce4dc5061febcd7acb26394a5a114751" -stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - streamfilter@^1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-1.0.7.tgz#ae3e64522aa5a35c061fd17f67620c7653c643c9" dependencies: readable-stream "^2.0.2" -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -7006,12 +5814,6 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - stringify-entities@^1.0.1: version "1.3.1" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.1.tgz#b150ec2d72ac4c1b5f324b51fb6b28c9cdff058c" @@ -7037,7 +5839,7 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0, strip-ansi@~4.0.0: +strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: @@ -7229,14 +6031,14 @@ stylelint@^8.1.1: svg-tags "^1.0.0" table "^4.0.1" -stylelint@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.2.0.tgz#f77a82518106074c1a795e962fd780da2c8af43b" +stylelint@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.2.1.tgz#fe63c169f6cd3bc81e77f0e3c6443df3267ec211" dependencies: autoprefixer "^8.0.0" balanced-match "^1.0.0" - chalk "^2.0.1" - cosmiconfig "^4.0.0" + chalk "^2.4.1" + cosmiconfig "^5.0.0" debug "^3.0.0" execall "^1.0.0" file-entry-cache "^2.0.0" @@ -7251,13 +6053,14 @@ stylelint@^9.2.0: lodash "^4.17.4" log-symbols "^2.0.0" mathml-tag-names "^2.0.1" - meow "^4.0.0" + meow "^5.0.0" micromatch "^2.3.11" normalize-selector "^0.2.0" pify "^3.0.0" postcss "^6.0.16" - postcss-html "^0.18.0" + postcss-html "^0.23.6" postcss-less "^1.1.5" + postcss-markdown "^0.23.6" postcss-media-query-parser "^0.2.3" postcss-reporter "^5.0.0" postcss-resolve-nested-selector "^0.1.1" @@ -7265,6 +6068,7 @@ stylelint@^9.2.0: postcss-sass "^0.3.0" postcss-scss "^1.0.2" postcss-selector-parser "^3.1.0" + postcss-syntax "^0.9.0" postcss-value-parser "^3.3.0" resolve-from "^4.0.0" signal-exit "^3.0.2" @@ -7301,6 +6105,12 @@ supports-color@^5.2.0, supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" @@ -7347,18 +6157,6 @@ tar@^2.0.0: fstream "^1.0.2" inherits "2" -tar@^4.4.0, tar@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.1.tgz#b25d5a8470c976fd7a9a8a350f42c59e9fa81749" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.2.4" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.1" - yallist "^3.0.2" - temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -7387,13 +6185,20 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +terser@^3.7.5: + version "3.7.5" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.7.5.tgz#b18090210794c79a5774bc1f0ebe80fb877a31bd" + dependencies: + commander "~2.14.1" + source-map "~0.6.1" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -textextensions@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-1.0.2.tgz#65486393ee1f2bb039a60cbba05b0b68bd9501d2" +textextensions@2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286" through2@2.0.3, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: version "2.0.3" @@ -7416,7 +6221,7 @@ through2@^0.6.1: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: +through@2, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -7441,10 +6246,6 @@ timers-ext@^0.1.2: es5-ext "~0.10.14" next-tick "1" -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7552,21 +6353,6 @@ typescript@^2.5.1: version "2.7.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" -uglify-es@^3.3.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -7603,18 +6389,6 @@ uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -unique-filename@^1.1.0, unique-filename@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" - dependencies: - imurmurhash "^0.1.4" - unique-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" @@ -7631,6 +6405,12 @@ unist-util-find-all-after@^1.0.1: dependencies: unist-util-is "^2.0.0" +unist-util-find-all-after@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" + dependencies: + unist-util-is "^2.0.0" + unist-util-is@^2.0.0, unist-util-is@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" @@ -7657,10 +6437,6 @@ unist-util-visit@^1.1.0: dependencies: unist-util-is "^2.1.1" -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -7686,21 +6462,6 @@ update-notifier@^2.2.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" -update-notifier@^2.3.0, update-notifier@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - urix@^0.1.0, urix@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -7711,6 +6472,10 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-polyfill@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/url-polyfill/-/url-polyfill-1.0.13.tgz#5324c5e6e3d3bafdc93a73c21def21e8b697c910" + use@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" @@ -7725,11 +6490,7 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1: +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" @@ -7739,19 +6500,13 @@ v8flags@^2.0.2: dependencies: user-home "^1.1.1" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: +validate-npm-package-license@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - dependencies: - builtins "^1.0.3" - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -7834,12 +6589,6 @@ vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - dependencies: - defaults "^1.0.3" - whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -7848,11 +6597,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@~1.3.0: +which@1, which@^1.2.14, which@^1.2.9: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -7874,12 +6619,6 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -worker-farm@^1.5.4, worker-farm@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - dependencies: - errno "~0.1.7" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -7887,11 +6626,11 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -wrappy@1, wrappy@~1.0.2: +wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: +write-file-atomic@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" dependencies: @@ -7940,17 +6679,15 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" +yargs-parser@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.0.0.tgz#c737c93de2567657750cb1f2c00be639fd19c994" + dependencies: + camelcase "^4.1.0" yargs-parser@^5.0.0: version "5.0.0" @@ -7958,29 +6695,6 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" |